我一直在研究减少应用程序的内存占用。继上一个问题之后:GDB - 我可以在内存中找到大型数据元素吗?我已经找到并删除了大多数最大的罪魁祸首。
nm --size-sort
从可执行文件的 .bss 部分中找到大项目是非常宝贵的。
在 pmap 中查看的内存占用量已大幅下降。但是在另一个系统(Ubuntu Pangolin,gcc 4.6.3)上继续这项工作时,我注意到正在运行的进程的内存占用是完全合理的,而且肯定比 .bss 的大小要小得多。
通过调试器运行代码,看起来 .bss 部分中的最大符号在访问数据之前并没有真正被分配(即我可以从一个大符号中设置一个数组元素,并且内存占用增加了 16MB )。
.bss 部分只是零初始化,所以很容易想象一个实现为它分配虚拟地址空间,但在使用它之前实际上不分配任何实际内存。
这是行为上的真正差异,还是系统之间报告的差异?