c++ - Windows 应用程序的堆大小

标签 c++ windows visual-c++ malloc

我有一台配备 8 Gb RAM 的 Windows7 Maximal 64 位计算机。我在 MSVC 中创建了一个 Win32 控制台应用程序并编写如下:

size_t const s_chunkSize = 1024 * 32;
size_t total = 0;
for (;;)
{
    if (!::malloc(s_chunkSize))
    {
        break;
    }
    total += s_chunkSize;
}
printf("total = %li", total);
// yes, I do not free allocated memory for simplicity

它输出 2111668224 低于 2Gb。如何强制我的程序分配超过 2Gb 的空间?我是否必须更改某些 MSVC 项目设置?还是我必须不使用 malloc 而是使用特定于 Windows 的函数?还是我必须以某种方式配置 Windows?

最佳答案

如评论中所述,您必须使用/LARGEADDRESSAWARE 链接器标志才能在提供虚拟地址空间的机器上启用 >2GB 的虚拟地址空间(通常是带有/3GB 标志的 32 位机器或 64 位机器)。请注意,这样做需要您在处理指针(http://blogs.msdn.com/b/oldnewthing/archive/2004/08/12/213468.aspx 和从那里链接的文章)时格外小心,并且无论如何都不允许您访问超过 4 GB 的虚拟地址空间。

更好的解决方案是构建一个 64 位版本的程序:您不再局限于 32 位地址空间,并且可以避免设置高位地址的警告。显然,缺点(除了可能出现的移植问题)是生成的可执行文件只能在 64 位机器上运行。

关于c++ - Windows 应用程序的堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20564221/

相关文章:

c++ - 为 C/C++ 设置 Windows 构建环境的最佳方法

c++ - 如果我们可以实例化类的对象并访问类的成员,为什么我们需要一个指向类的指针?

C++: error LNK2019: 未解析的外部符号

c++ - 有没有办法根据用户对配对 vector 进行排序?

c - 如何制作文本文件 "Open With"我的 Win Api 文本编辑器?

c++ - rand() 函数的问题

windows - curl 包未在 ghci 加载

C++ 确保释放 vector 的技巧,但 GNU g++ 存在编译问题

c++ - boost::container::vector 无法使用 C++03 编译器进行编译

c++ - 使用 VS2010 SP1 的函数模板中的编译器错误