gpt4 book ai didi

c - 什么时候分配静态数据 (.bss)?

转载 作者:行者123 更新时间:2023-12-04 05:38:12 28 4
gpt4 key购买 nike

我一直在研究减少应用程序的内存占用。继上一个问题后:GDB - can I find large data elements in memory我已经找到并删除了大多数最大的罪魁祸首。
nm --size-sort从可执行文件的 .bss 部分找到大项目是非常宝贵的。

在 pmap 中查看的内存占用量已大幅下降。但是在另一个系统(Ubuntu Pangolin,gcc 4.6.3)上继续这项工作时,我注意到正在运行的进程的内存占用是完全合理的,而且肯定比 .bss 大小小得多。

通过调试器运行代码,看起来 .bss 部分中最大的符号在访问数据之前并未真正分配(即我可以设置一个数组
大符号之一的元素,并且内存占用增加了 16MB)。

.bss 部分只是零初始化,因此很容易想象一个实现为其分配虚拟地址空间,但在使用之前实际上不会分配任何实际内存。

这是行为上的真正差异,还是系统之间报告的差异?

最佳答案

在 Linux 中,零初始化页面都映射到内存中相同的“归零”物理页面。使用写时复制方法,当您写入该页面的内存时,页面会被复制并重新映射到新页面,这反过来会导致应用程序的内存占用增加。正如你所怀疑的,听起来这就是正在发生的事情。这适用于所有 Linux 发行版。

关于c - 什么时候分配静态数据 (.bss)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647956/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com