gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:24:50 24 4
gpt4 key购买 nike

我有一台配备 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com