每个进程允许的最大堆使用量

7 c++ heap memory-management visual-c++

我使用malloc来分配内存和内存要求都大于1GB.程序崩溃......

我想问一下这个问题是否可以解决?如果是的话怎么样?

我的RAM大小为3GB,使用32位Windows操作系统并使用vc ++编程

Ben*_*Ben 13

每进程内存限制为2GB(除非您使用Windows/3GB开关).但是,您可能会遇到内存碎片.当内存碎片化(使用VMMap可视化)时,您将无法分配大的连续块.你的选择是:

  • 分配较小的块(首选)
  • 找到一些方法来整理内存碎片
  • 升级到64位操作系统(您仍然可以编译32位代码,但用户模式内存最多可达4GB - 记得打开大内存感知编译器标志;如果编译64位代码,它就赢了在32位操作系统上运行,但内存限制远高于4GB)
  • 如果您需要那么多内存来加载文件,您可能能够对该文件进行内存映射
  • 您可能能够比较小的块更早地分配最大的块.


Nav*_*een 2

在 32 位 Windows 操作系统上,每个进程获得 4 GB 虚拟地址空间,其中 2 GB 可供用户使用,2 GB 可供内核使用。因此,无论进行什么分配,都应该在这 2 GB 空间内。请注意,这 2 GB 包含其他内容,例如应用程序加载的其他 dll,因此该内存是碎片化的。当您执行 malloc() 时,由于 malloc 保证它返回一个连续的内存块,因此 CRT 将尝试查找可能不可用的 1 GB 连续空闲内存,因此 malloc() 失败。解决此问题的一种方法是使用内存映射文件并仅将所需内存的一部分映射到虚拟地址空间中。