我某处发生内存泄漏,但它似乎与我的程序无关。我做出这个大胆的声明是基于这样一个事实:一旦我的程序因段错误、退出或中止而终止,内存就不会恢复。如果我的程序是罪魁祸首,我会假设 MMU 会恢复所有内容,但情况似乎并非如此。
我的问题是:
在一个小型 Linux 系统(64 Mb RAM)上运行一个仅使用堆栈内存和几次调用 malloc()
的程序时,是什么原因导致我看到内存正在耗尽并在程序终止后保持不变?
相关问题是here :
<小时/>这一切都是在相关代码将其 stdout、stderr 定向到文件后开始的。几个小时后,它因“段错误”而中止。快速(天真?)查看/proc/meminfo 显示没有太多可用内存,所以我假设有东西泄漏。
最佳答案
看来我没有内存泄漏(请参阅 here ),但它确实让我产生了一些新问题......
<小时/>事实证明,写入 block 设备会占用大量物理内存;在我的系统中只有 64 Meg,因此将数百个 Meg 写入 USB 驱动器会大大增加缓存、事件和非事件内存池。
当设备卸载时,这些内存池会立即释放到 Free 内存池。
段错误的确切原因仍然是一个小谜团,但我知道可以通过更好地了解虚拟内存资源来减少这种情况的发生,特别是在 block 设备的使用方面。
关于linux - ARM/Linux内存泄漏: Can a user program retain memory after terminating?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545533/