当“空闲”内存为零但是备用内存仍然可用时,c ++程序崩溃

时间:2011-03-24 02:55:03

标签: c++ out-of-memory

我有点问题:

我需要将大约260mb的数据加载到一个struct(带有fread)中。 Windows资源管理告诉我,我有:

  • 2346mb正在使用的内存
  • 1478mb内存处于待机状态
  • 248mb无记忆

然而,当我运行我的程序并加载数据时,程序在没有剩余“空闲”内存的位置崩溃。还剩下大约1200mb的待机内存。

我想,当free mem为空时,它会自动将备用内存交换到磁盘并释放更多内存吗?

有什么办法可以避免这个问题,还是我做错了什么?

3 个答案:

答案 0 :(得分:5)

仅仅因为内存可用并不意味着它是连续的。当你要求这样的大块时,你不太可能得到它,因为可用内存是碎片化的。

答案 1 :(得分:1)

你耗尽了虚拟地址空间,而不是物理内存。正如您所猜测的那样,物理内存将会增加,缩小磁盘缓存,然后使用交换文件。但是,虚拟地址空间是一个硬性限制。

答案 2 :(得分:0)

  1. 尝试从系统属性更改虚拟内存页面文件大小。
  2. 在程序开始时分配所有必需的内存。 (记忆池概念)
  3. 重启系统,然后重试