Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用XNAMATH优化堆栈分配的对象_C++_Visual Studio 2012_X86_Directx 11_Xna Math Library - Fatal编程技术网

C++ 使用XNAMATH优化堆栈分配的对象

C++ 使用XNAMATH优化堆栈分配的对象,c++,visual-studio-2012,x86,directx-11,xna-math-library,C++,Visual Studio 2012,X86,Directx 11,Xna Math Library,我最近开始分析和优化DirectX 11应用程序,该应用程序历史上是使用x64平台配置开发的。在切换到x86以测试使用扩展指令集时的行为之后,我开始注意到我的某些对象正在被优化,特别是堆栈分配的XMMATRIX对象。只有在x86版本配置中构建时才会发生这种情况(在x64版本中可以正常工作),我已确保链接到正确的库。我还测试了一个新的项目,以确保我没有意外地更改隐藏的项目设置。我已经证实关闭C++代码优化可以停止这个问题。在为Windows x86平台开发时,在尝试使用XNAMATH库时,我是否忽

我最近开始分析和优化DirectX 11应用程序,该应用程序历史上是使用x64平台配置开发的。在切换到x86以测试使用扩展指令集时的行为之后,我开始注意到我的某些对象正在被优化,特别是堆栈分配的XMMATRIX对象。只有在x86版本配置中构建时才会发生这种情况(在x64版本中可以正常工作),我已确保链接到正确的库。我还测试了一个新的项目,以确保我没有意外地更改隐藏的项目设置。我已经证实关闭C++代码优化可以停止这个问题。在为Windows x86平台开发时,在尝试使用XNAMATH库时,我是否忽略了任何特定的使用要求

用代码段更新


可能与我在内存对齐方面遇到的类似问题有关


在课堂上

你能告诉我们谁有这个问题吗?什么行为使您相信正在优化
XMMATRIX
对象?更新以反映程序流程中首次遇到的XMMATRIX(或任何XNAMATH)使用情况。摄影机在构建场景期间进行堆分配。我得到的行为只是空指针异常,在尝试构造投影矩阵时首次遇到。鉴于我的XMMATRIX是一个堆栈分配的结构,我假设它要么被优化掉了(错误只是误导),要么是XNAMATH函数调用中其他东西的症状。这确实是问题所在。我将XMMATRIX存储为类数据成员。前一段时间解决了,但感谢您将其恢复。
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);
 }