如何在C ++中增加程序堆栈/堆上分配的最大内存量?
增加计算机的RAM是否会自动增加计算机程序的堆栈/堆内存?
答案 0 :(得分:9)
在Visual C ++中,您可以使用指令#pragma
。例如:
#pragma comment(linker, "/STACK:2000000")
#pragma comment(linker, "/HEAP:2000000")
答案 1 :(得分:5)
第二次编辑:我从您的评论中看到您在Windows中工作,所以我在下面的Unix答案对您没有多大帮助。但请参阅Determining Stack Space with Visual Studio和C/C++ maximum stack size of program。
堆栈 大小在Linux中经常受到限制。命令ulimit -s将以Kbytes为单位给出当前值。您可以(通常)更改文件/etc/security/limits.conf中的默认值。
您还可以根据权限使用setrlimit()
在每个进程的基础上更改它。例如,请参阅my answer到Segmentation fault: Stack allocation in a C program in Ubuntu when bufffer>4M。
对于 堆 ,请参阅例如Heap size limitation in C。但我不相信你可以增加或减少最大尺寸。
答案 2 :(得分:5)
您可以使用Visual Studio中的链接选项/堆和/堆栈指定保留的堆大小和堆栈大小。有关详细信息,请查看这些MSDN文章:
答案 3 :(得分:3)
进程的堆大小通常受进程可分配的最大内存限制。堆不需要是连续的(除非您正在执行类似malloc(1000000000)的操作),因此堆可以使用大部分可用的地址空间。
在Windows下,最大处理大小会因几个因素而异。
使用32位Windows,32位进程默认情况下可以分配2 GB。 如果使用/ 3GB开关启动Windows并使用“启用大地址”链接器标志编译该进程,则该进程可以分配3 GB。
使用64位Windows,默认情况下32位进程可以分配2 GB。 如果该进程与“启用大地址”链接,则64位Windows允许32位进程分配4 GB。
64位进程(在64位Windows上)可以分配16,000 GB。
答案 4 :(得分:1)
我遇到了一些内存问题,默认堆和堆栈保留大小为1 MB。但是当我将上面的属性设置为2 MB(2000000)时,它可以正常工作。
要在Visual Studio开发环境中设置这些属性,请按照以下步骤操作。
Heap Reserve Size
和Stack Reserve Size
。