【问题标题】:compiling in amd64 mode (visual studio 2010)在 amd64 模式下编译 (visual studio 2010)
【发布时间】:2011-08-12 16:11:17
【问题描述】:

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

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

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

提前致谢。

(Windows 7 Professional 上的 Visual Studio 2010 终极版。)

编辑:给博

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

编辑2:

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

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

EDIT4:对不起,没有评论单个帖子,但如果我点击“评论”,什么也没有发生。 但我刚刚发现了一些东西。编译器的问题可能不是问题,因为我可以成功分配 2 个 vecs,其中一个大小为 500 000 000,另一个大小为 700 000 000。 有其他人知道为什么我不能分配大于 4gb 的向量吗?

【问题讨论】:

  • 你的系统有多少物理内存?
  • 如果您通过评论来回答答案,而不是通过对原始问题添加编辑来回复答案,那么这个问题会更容易理解。很难说你在回复谁/回复什么。
  • 我们需要查看代码。
  • 您的代码无疑会死于 std::bad_alloc 异常。在 msvc 内存模型中,x64 上的单个分配仍然限制为 2GB。更大的分配在技术上是可行的,但会使数组索引非常慢。

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


【解决方案1】:

它可能不是冻结,而是填满了您的交换文件。

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


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

#include <vector>
#include <iostream>

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

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

    return 0;
}

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

【讨论】:

  • 您发布的代码也适用于我。如果我用 push_back 构建数组,它不起作用。
【解决方案2】:

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

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

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

现在,至于您的错误,无论您使用的是交叉编译器还是本机,几乎可以肯定与它无关。那是一个完全不同的问题。

【讨论】:

    【解决方案3】:

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

    $ dumpbin /headers myprogram.exe

    它应该在一开始就告诉你目标架构。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 2014-04-09
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多