我一直在寻找减少应用程序的内存占用。继上一个问题之后:GDB - can I find large data elements in memory我找到并删除了大部分最大的罪魁祸首。何时分配静态数据(.bss)?
nm --size-sort
对于找到可执行文件的.bss部分中的大项目非常宝贵。
在pmap中查看的内存占用大幅下降。但是,在另一个系统(Ubuntu Pangolin,gcc 4.6.3)上继续这项工作时,我注意到正在运行的进程的内存占用是完全合理的,而且肯定比.bss的大小要小得多。
通过调试器运行代码,它看起来像.bss部分中的最大符号在数据访问之前并不真正分配(即,我可以从其中一个大符号中设置数组 )内存占用量增长16MB)。
.bss段只是零初始化的,所以很容易想象一个实现为它分配虚拟地址空间,但实际上并没有分配任何实际的内存直到它被使用。
这是一个真正的行为差异,还是系统间报告的差异?
这听起来很合理。我不认为你知道这会持续多久?我看到显示巨大内存占用的系统是2007年代(SLES 10.1)。 – asc99c 2012-07-25 12:20:59
Linux已经很长时间处理了这样的零页面。共享的ZERO_PAGE存在于Linux 2.4中,正如页面错误处理程序中的写入时复制支持一样。 – ncultra 2012-07-25 15:13:28