2013-05-26 27 views
0

我最近開始對使用x64平臺配置歷史開發的DirectX 11應用程序進行分析和優化。切換到x86以測試使用擴展指令集時的行爲後,我開始注意到我的某些對象正在被優化,特別是堆棧分配的XMMATRIX對象。這隻發生在x86 Release配置(在x64版本中正常工作)中構建時,並且我確保與正確的庫鏈接。我還測試了一個新項目,以確保我不會意外更改埋藏的項目設置。我已經證實,關閉C++代碼優化可以解決問題。在爲Windows x86平臺開發時,在嘗試使用XNAMATH庫時,是否有任何特定的使用要求被忽略?使用XNAMATH優化了堆棧分配對象

有可能連接到我與內存對齊具有類似問題的代碼片段

class Camera : public InputListener 
{ 

public: 
    Camera(); 
    ~Camera(); 

      /* Public functions here */ 
private: 
    XMMATRIX mViewMatrix; 
    XMMATRIX mInvView; 
    XMMATRIX mProjectionMatrix; 
    XMMATRIX mRotationMatrix; 
    XMVECTOR mPosition; 
    XMVECTOR mLookAt; 

     /* Other variables and private funcctions here */ 

}; 



Camera::Camera() : mViewMatrix(), 
       mProjectionMatrix(), 
       mRightHold(false), 
       mRotationMatrix(), 
       mPosition(), 
       /*other initializations*/ 
{ 
InputManager::GetInstance().RegisterListener(this); 

mAspectRatio = (float)mViewWidth/(float)mViewHeight; 

mProjectionMatrix = XMMatrixPerspectiveFovLH(mAngle, mAspectRatio, mNearClipDist, mFarClipDist); 

mPosition = XMVectorSet(0, 0, -100.0f,0.0f); 
XMVECTOR Up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); 
mViewMatrix = XMMatrixLookAtLH(mPosition,XMVectorSet(0,0,0,0),Up); 

mHeightReciprocal = 1/(float)mViewHeight; 
mWidthReciprocal = 1/(float)mViewWidth; 
mAngleTangent = tanf(mAngle * 0.5f); 
} 
+0

,你能否告訴我們[一些代碼(http://sscce.org/),有這個問題?什麼行爲使你相信'XMMATRIX'對象正在被優化掉? – Mankarse

+0

已更新,以反映程序流程期間首次遇到XMMATRIX(或任何XNAMATH)的用法。相機在構建場景時分配給堆。我得到的行爲只是空指針異常,在嘗試構建投影矩陣時首先遇到。看到我的XMMATRIX是一個堆棧分配結構,我認爲它正在被優化(並且錯誤只是誤導),或者它是XNAMATH函數調用中其他內容的一個症狀。 – Evan

回答