Linux `size` 命令给出与 `ls` 不同的结果

Linux `size` 命令给出与 `ls` 不同的结果

我有一个在 Ubuntu 16.04 上构建的可执行文件。 GUI 上和通过 ls -l 命令显示的文件大小为:

-rwxrwxr-x 1 alibivmuser alibivmuser 19108760 dic 20 15:49 NreSpeechApplication

我知道这意味着文件的实际大小是 19 MB。在我的文件系统上,大小在某种程度上相似(使用 ls -s):

18664 NreSpeechApplication

我预计 Linux 中该命令的大小输出size会给出类似的结果,但它显示的总大小大约为 1.8 MB:

text    data     bss     dec     hex filename
1806360    2416    4552 1813328  1bab50 NreSpeechApplication

所以我的问题是:为什么两个结果如此不同?这些额外的 MB 从哪里来,从 1.8 形成 18MB?

答案1

ls显示实际文件的大小,即打开并读取文件时的字节数。

如果您想知道该文件在磁盘上占用了多少空间,您应该使用du -h.du考虑文件系统的块。

示例:如果您有一个大小为 1500 的文件,而块大小为 1024,du则应显示 2048(因为该文件无法“适合”一个块,而ls会显示 1500。

size显示可执行文件的运行时映像的大小。例如,您的可执行文件将使用大约 1.8MB 的 RAM/ROM。这与文件的大小没有直接关系。

如果您想知道可执行文件将占用多少 RAM/ROM(不包括动态内存分配),则 size 可以为您提供所需的信息。

答案2

size显示可执行文件的传统部分。

请注意,例如,这些传统部分不包含调试信息。调试信息占用大量空间。要获得完整的部分列表,请运行objdump -h NreSpeechApplication

总数(十进制/十六进制)与文件大小不直接相关还有另一个原因:它包括bss.加载可执行文件时,此部分被初始化为零,因此它不包含在文件中。

也有可能该文件只是异常,例如在末尾添加了随机垃圾:)。

相关内容