在amd64模式下编译(visual studio 2010)

时间:2011-08-12 16:11:18

标签: c++ visual-studio-2010 64-bit x86-64

我想编译本机64位应用程序。我确实以正确的方式配置VS并且它可以正常工作但是很明显它是交叉编译而不是在本机amd64模式下编译,因为如果我尝试分配超过1 000 000 000的向量,我的程序仍会冻结。

现在,我的问题是我必须将额外的“amd64”(如此处所述http://msdn.microsoft.com/en-us/library/x4d2c09s%28VS.80%29.aspx)。 我在属性页>下尝试了它调试>命令参数,但没有帮助。

哦,不要对我很苛刻,我对这个话题有点新意。

提前致谢。

(Windows 7专业版Visual Studio 2010终极版。)

编辑:到博

我不知道因为我在发布模式下运行它并且我确实得到“... exe已停止工作”消息。此外,我正在添加推回元素,它适用于1 000 000 000个元素,但不适用于1 100 000个元素。

EDIT2:

感谢您的提示。我实际上正在使用2010版本的页面,我刚刚发布了错误的链接。 我也按照这些网站上的说明进行操作,正如我所写,它一直有效,直到我使用超过4 GB的RAM。 我试图运行一个使用超过2 GB RAM的32位应用程序,当然没有用。 然后我在页面上做了说明 - >我能够以4 GB的使用率运行该应用程序。 现在,我想分配超过4GB - >它没有用。 为什么我认为它必须对编译的东西做一些事情是你可以设置一个特定的标志,使32位应用程序能够使用4gb,我认为这就是交叉编译选项的作用。 - >使它“以某种方式”与32位和64位兼容。

EDIT3:我在win7 64x上安装了8gb

EDIT4:对不起,因为没有评论单个帖子,但如果我点击“评论”没有任何反应。 但我只是做了些什么。编译器的问题可能不是问题,因为我可以成功分配2个vecs,其中一个大小为500 000 000,另一个大小为700 000 000。 有人知道为什么我不能分配大于4gb的矢量吗?

3 个答案:

答案 0 :(得分:3)

它可能不会冻结,但会填满您的交换文件。

如果在调试模式下运行,运行时将使用特殊值填充数组(标记未初始化的变量)。这可能需要一段时间!


我在发布模式下运行此程序没有问题

#include <vector>
#include <iostream>

int main()
{
    std::vector<int>   v(2000000000);

    std::cout << v.size();

    return 0;
}

在几秒钟内运行(具有大量交换文件活动)并打印预期大小。

答案 1 :(得分:0)

现在,我的问题是我必须把额外的“amd64”放在哪里

首先,你链接到VS 2005的指令,而不是2010年。虽然在这种情况下可能无关紧要,但VS 2005和2010之间存在很多差异,所以要小心并使用正确的文档。这是正确的link

“amd64”是您传递给vcvarsall.bat以初始化用于在命令行会话中构建x64应用程序的环境的参数。它没有传递给您的应用程序,也不是IDE中的项目设置。 link中“Vcvarsall.bat”下的段落和表格解释了这一点。 Lirik在评论中发布的链接解释了如何在IDE中正确配置项目,但这又是VS 2005的链接。您想使用此link

现在,至于你的bug,你是否正在使用交叉编译器或本机几乎肯定与它无关。这是一个完全独立的问题。

答案 2 :(得分:0)

您可以使用以下命令检查您的应用程序是32位还是64位:

$ dumpbin / headers myprogram.exe

它应该告诉你接近开始的目标架构。