我在 Ubuntu 10.04(32 位系统架构)中运行一个 C++ 程序。如果我计算一下我的程序使用的内存量,就会发现它有 800MB。我有 4GB 的 RAM。但程序在运行完成之前就抛出了内存不足异常。为什么会发生这种情况?是因为内存结构或实现问题,还是什么可能引发此问题?我以前见过这个问题很多次,但一直不明白背后的原因。你们有人处理过这种情况吗?
更新:
我正在尝试运行的程序是这里附有解释。为了增加我使用的内存量,我只需增加max_i
主函数中的值即可。
答案1
可能出错的事情:
系统无法为您提供 X 字节的连续内存。假设您想要一个 512MB 的块,但系统找不到这么大的连续块。那么您就倒霉了,会收到“内存不足”异常
您错误地计算了程序实际需要的内存量。您是否释放了未使用的内存?您是否正确计算了某些结构(关键字对齐)的开销?
您是否拥有足够大的交换文件以便系统可以换出其他进程?
答案2
我们需要更多信息。看起来你正在做一个很酷的实验,但这个程序实际上做了什么。
您是否分配了数千个小块内存或几个大的连续块等等......
在我看来,这个问题与 stackoverflow 的适用性有关。
正如其他人所建议的那样,您处于 32 位环境中,并且您的进程可能很难一次性分配大块。但是,我只是推测,没有更多细节。