如何增加堆栈/堆上分配的最大内存

时间:2012-12-19 02:52:40

标签: c++ memory

  • 如何在C ++中增加程序堆栈/堆上分配的最大内存量?

  • 增加计算机的RAM是否会自动增加计算机程序的堆栈/堆内存?

5 个答案:

答案 0 :(得分:9)

在Visual C ++中,您可以使用指令#pragma。例如:

#pragma comment(linker, "/STACK:2000000")
#pragma comment(linker, "/HEAP:2000000")

答案 1 :(得分:5)

第二次编辑:我从您的评论中看到您在Windows中工作,所以我在下面的Unix答案对您没有多大帮助。但请参阅Determining Stack Space with Visual StudioC/C++ maximum stack size of program

堆栈 大小在Linux中经常受到限制。命令ulimit -s将以Kbytes为单位给出当前值。您可以(通常)更改文件/etc/security/limits.conf中的默认值。

您还可以根据权限使用setrlimit()在每个进程的基础上更改它。例如,请参阅my answerSegmentation fault: Stack allocation in a C program in Ubuntu when bufffer>4M

对于 ,请参阅例如Heap size limitation in C。但我不相信你可以增加或减少最大尺寸。

答案 2 :(得分:5)

您可以使用Visual Studio中的链接选项/堆和/堆栈指定保留的堆大小和堆栈大小。有关详细信息,请查看这些MSDN文章:

  1. Heap Allocation
  2. Stack Allocation

答案 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 SizeStack Reserve Size