du和size报告目标文件的不同值

时间:2013-11-10 12:31:54

标签: linux file object console size

在编译项目时,我注意到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段的总和?我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

size命令显示执行期间代码和数据占用的数量。目标文件包含的内容远不止于此。

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

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

答案 1 :(得分:0)

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

du具有巨大规模的原因 - 文件系统通常由哪些文件不适合这些块的块组成,这恰好导致了这种差异。例如,如果文件大小为4096字节,size显示4096与du相似,但当文件大小为5000字节时,size显示5000字节,但du显示8192。

这称为slack space

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