Size()vs ls -la vs du -h哪一个是正确的大小?

che*_*ish 6 linux ls linux-kernel du image-size

我正在编译自定义内核,我想测试图像文件的大小.这些是结果:

ls -la | grep vmlinux
-rwxr-xr-x   1 root   root   8167158 May 21 12:14 vmlinux

du -h vmlinux
3.8M    vmlinux

size vmlinux
   text    data     bss     dec     hex filename
2221248  676148  544768 3442164  3485f4 vmlinux
Run Code Online (Sandbox Code Playgroud)

由于它们都显示不同的尺寸,哪一个最接近实际图像尺寸?他们为什么不同?

And*_*mbe 8

他们都是正确的,他们只是显示不同的大小.

  • ls 显示文件的大小(当您打开并读取它时,这将是您将获得的字节数)
  • du 显示实际磁盘使用量,由于漏洞,可能小于文件大小
  • size 显示与文件大小无直接关系的对象/可执行文件的运行时映像的大小(bss在文件中不使用任何字节,无论文件大小多少,该文件可能包含不属于运行时映像的调试信息等)

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

  • `size`为常规二进制文件提供了良好的信息.我想你会想看一下linux内核的地图文件.例如,*.init*部分在第一个进程开始运行后被删除,等等.可能有*unwind*表等,其中`size`可能会或可能不会处理. (2认同)