Linux du和size为对象文件报告不同的值

Linux du和size为对象文件报告不同的值,linux,file,object,console,size,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段之和不同?这里缺少什么?命令显示执行期间代码和数据将占用多少空间。对象文件包含的内容当然远不止这些 它从文件格式本身的开销开

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

命令显示执行期间代码和数据将占用多少空间。对象文件包含的内容当然远不止这些

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


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

du
显示驻留在文件系统上的文件大小,而
大小是以字节为单位的实际大小

为什么
du
的大小很大?文件系统通常是由块组成的,而这些块上的文件不适合这些块,这正是造成这种差异的原因。例如,如果文件大小为4096字节,
size
显示4096个与
du
相似的字符,但当文件大小为5000字节时,
size
显示5000字节,但
du
显示8192

这被称为

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