Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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++ 在amd64模式下编译(visual studio 2010)_C++_Visual Studio 2010_64 Bit_X86 64 - Fatal编程技术网

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

C++ 在amd64模式下编译(visual studio 2010),c++,visual-studio-2010,64-bit,x86-64,C++,Visual Studio 2010,64 Bit,X86 64,伙计们,我想编译一个本机64位应用程序。我确实以正确的方式配置了VS,它可以工作,但很明显,它是交叉编译,而不是在本机amd64模式下编译,因为如果我尝试分配一个超过1000的向量,我的程序仍然会冻结 现在,我的问题是我必须把额外的“amd64”放在哪里(如这里所述)。 我在属性页>调试>命令参数下尝试了它,但没有帮助 哦,别对我太苛刻了,我对这个话题有点陌生 提前谢谢 (windows 7 professional上的Visual studio 2010终极版。) 编辑:给波 我不知道,因为我

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

现在,我的问题是我必须把额外的“amd64”放在哪里(如这里所述)。 我在属性页>调试>命令参数下尝试了它,但没有帮助

哦,别对我太苛刻了,我对这个话题有点陌生

提前谢谢

(windows 7 professional上的Visual studio 2010终极版。)

编辑:给波

我不知道,因为我在发布模式下运行它,我确实收到了“…exe已停止工作”的消息。此外,我添加了元素与推回,它的工程为1 000 000个元素,但不是为1 100 000 000

编辑2:

谢谢你的提示。我实际上使用的是2010版的网页,我只是发布了错误的链接。 我也遵循了这些网站上的说明,正如我所写的,它一直工作到我使用超过4GB的RAM。 我试着运行一个32位的应用程序,它使用超过2GB的内存,当然不行。 然后,我按照页面上的说明->我能够以4 GB的使用率运行该应用程序。 现在,我想分配超过4gb的内存->它不起作用。 我认为它与编译有关的原因是,您可以设置一个特定的标志,使32位应用程序能够使用4gb,我认为交叉编译选项就是这样做的。->使其“以某种方式”兼容32位和64位

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

编辑4:对不起,没有评论这些帖子,但是如果我点击“评论”,什么都不会发生。 但我只是做了点什么。编译器的问题可能不是问题所在,因为我可以成功地分配两个向量,一个大小为50万,另一个大小为70万。
其他人知道为什么我不能分配一个大于4gb的向量吗?

可能不是冻结,而是填充了你的交换文件

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


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

#include <vector>
#include <iostream>

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

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

    return 0;
}
#包括
#包括
int main()
{
标准:向量v(2000000000);
std::cout现在,我的问题是我必须把额外的“amd64”放在哪里

首先,您链接到的是VS 2005的说明,而不是2010。虽然在本例中这可能无关紧要,但VS 2005和2010之间存在很多差异,因此请小心使用正确的文档。这是正确的

“amd64”是您传递给vcvarsall.bat的参数,用于在命令行会话中初始化用于构建x64应用程序的环境。它不会传递给您的应用程序,也不是IDE中的项目设置。“vcvarsall.bat”下的段落和表格注释中的链接Lirik解释了如何在IDE中正确配置您的项目,但这也是VS2005的链接。是否要使用此链接


现在,对于您的bug,无论您使用的是交叉编译器还是本机几乎肯定与此无关。这是一个完全不同的问题。

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

$dumpbin/headers myprogram.exe


它应该在接近开始时告诉您目标体系结构。

还要确保您有正确的配置:以及您的系统有多少物理内存?如果您通过对答案进行评论而不是对原始问题进行编辑来回答,那么这个问题将更容易理解。很难判断您是谁/什么您正在回复。我们需要查看代码。毫无疑问,您的代码会因std::bad_alloc异常而死亡。在msvc内存模型中,x64上的单个分配仍然限制为2GB。从技术上讲,更大的分配是可能的,但会使数组索引速度非常慢。您发布的代码也适用于我。如果我构建数组,则无法工作向后推。