我最近開始對使用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);
}
,你能否告訴我們[一些代碼(http://sscce.org/),有這個問題?什麼行爲使你相信'XMMATRIX'對象正在被優化掉? – Mankarse
已更新,以反映程序流程期間首次遇到XMMATRIX(或任何XNAMATH)的用法。相機在構建場景時分配給堆。我得到的行爲只是空指針異常,在嘗試構建投影矩陣時首先遇到。看到我的XMMATRIX是一個堆棧分配結構,我認爲它正在被優化(並且錯誤只是誤導),或者它是XNAMATH函數調用中其他內容的一個症狀。 – Evan