1

在编译项目时,我注意到 du 和 size 命令输出不相加:

> du -sh X.o
490K X.o

> size X.o
  text    data     bss     dec     hex filename
  2128       0      12    2140     85c X.o

为什么目标文件占用的磁盘空间与文件的文本数据和bss段之和不同?我在这里想念什么?

4

2 回答 2

0

size命令向您显示在执行期间代码和数据将占用多少。当然,目标文件包含的内容远不止这些。

它从文件格式本身的开销开始,它必须至少包含size用于找出每个部分在内存中的大小的信息。然后是符号表、调试信息和谁知道什么(取决于编译器和目标文件格式)。

您可以获得更全面的信息objdump -h(或objdump -x查看有多少重定位记录),这些信息仍然不能涵盖开销,但会显示有多少实际内容。

于 2013-11-10T13:10:13.760 回答
0

du显示驻留在文件系统 Vs 上的文件的大小。size这是实际大小(以字节为单位)。

大小巨大的原因du- 文件系统通常由文件不适合这些块的块组成,这正是导致这种差异的原因。例如,如果文件大小为 4096 字节,则size显示 4096 类似于du但当文件大小为 5000 字节时,size显示 5000 字节但du显示 8192。

这称为松弛空间

注意:以上假设文件系统分配以 4096 字节为单位。

于 2013-11-10T13:16:41.223 回答