1

好的,我在 Internet 上找到了本指南和其他一些指南,它们建议使用 Visual Studio 命令提示符从 VS 2010 IDE 目录运行以下命令:

editbin /largeaddressaware devenv.exe

我已经运行了这个,到目前为止一切似乎都很好(我还没有遇到任何问题)。但是我找不到关于使 Visual Studio 2010 使用超过 2GB 的 RAM 有什么负面影响(如果有的话)的信息?Visual Studio 被构建为使用最大 2 GB 的 RAM。如果 VS 打算使用超过 2 GB 的 RAM,那么我就不必破解二进制文件了。虽然我喜欢安于现状并尝试新事物而不为最坏的情况做准备(这就是我所擅长的,哈哈),但我至少想知道我应该准备好应对什么问题出错。

TL;博士; : 如果有的话,使用上面的“editbin”命令使 Visual Studio 2010 知道大于 2 GB 的内存地址有什么负面影响?

4

3 回答 3

3

启用大地址感知的负面影响是应用程序可能会以奇怪的方式崩溃或损坏内存。该程序是假设它必须处理的指针值不会大于 2GB 的情况下编写的。这可以通过微妙的方式来完成。典型的例子可能是计算指针之间​​的中点地址。

ptrMid = (ptr1 + pt2) / 2;

如果您的所有指针都小于 2GB,那将非常有用,但如果不是,您将因溢出而得到不正确的结果。

ptrMid = (0x80000000 + 0x80000004) / 2 = 0x0000002, not 0x80000002

您不仅需要担心 Visual Studio 无法处理 > 2GB 的指针,任何加载项也会受到此影响。

有关在启用 largeaddressaware 之前必须检查的更多内容,请参阅此问题,请参阅此问题: What to do to make application Large Address Aware?

您真的不应该使用 editbin 在您无法控制的应用程序上更改 largeaddressaware。

于 2013-05-29T23:29:37.370 回答
2

在阅读了这个讨论并检查了现有的标题之后,看起来 VS2010 已经应用了这个功能,至少对于我的安装来说(64 位 win7)。如果它已经被编译,我认为你不需要担心不良的副作用。

于 2013-05-29T23:35:58.450 回答
0

这似乎是设计使然。

回想一下,即使设置了 /3GB 开关,32 位程序也只能接收 2GB 的地址空间,除非它们通过传递 /LARGEADDRESSAWARE 标志表明它们愿意处理超过 2GB 的地址。

此标志在 64 位 Windows 上的含义相同。但由于 64 位 Windows 有更大的可用地址空间,它可以让 32 位 Windows 程序使用整个 4GB 的地址空间。这在知识库文章 Q889654中的表“Windows 32 位和 64 位版本的内存和 CPU 限制比较”中几乎是偶然提到的。

换句话说,某些类别的 32 位程序(即地址空间紧张的程序)受益于在 64 位 Windows 机器上运行,即使它们没有明确利用任何 64 位功能。

http://blogs.msdn.com/b/oldnewthing/archive/2005/06/01/423817.aspx

Editbin是 Microsoft 实用程序,因此他们基本上声称它可以工作。

于 2013-05-29T23:08:05.620 回答