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