【问题标题】: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 字节为单位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 2020-05-01
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多