【问题标题】:du and size report different values for object filesdu 和 size 报告目标文件的不同值
【发布时间】:2013-11-10 12:31:53
【问题描述】:
在编译项目时,我注意到 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段之和不同?我在这里错过了什么?
【问题讨论】:
标签:
linux
file
object
console
size
【解决方案1】:
size 命令显示在执行期间代码和数据将占用多少。当然,目标文件包含的内容远不止这些。
它从文件格式本身的开销开始,它必须至少包含size 用来确定每个部分在内存中的大小的信息。然后是符号表、调试信息和谁知道什么(取决于编译器和目标文件格式)。
您可以使用objdump -h(或objdump -x 以查看有多少重定位记录)获得更全面的信息,这仍然不能涵盖开销,但会显示有多少实际内容。
【解决方案2】:
du 显示驻留在文件系统上的文件的大小。 size 以字节为单位的实际大小。
du 具有巨大大小的原因 - 文件系统通常由文件不适合这些块的块组成,这正是导致这种差异的原因。例如,如果文件大小为 4096 字节,size 显示 4096,类似于 du,但当文件大小为 5000 字节时,size 显示 5000 字节,而du 显示 8192。
这被称为slack space。
注意:以上假设文件系统分配以 4096 字节为单位。