bloaty

安装教程参考:https://github.com/google/bloaty

Bloaty是一个用于分析二进制文件大小的工具,它可以深入分析二进制文件,使用自定义的ELF、DWARF和Mach-O解析器,将二进制文件的每个字节准确地归因于生成它的符号或编译单元。以下是一些使用Bloaty的基本步骤:

  1. 安装Bloaty:你可以从GitHub上的Bloaty仓库下载源代码,并按照README.md文件中的说明进行编译和安装。

  2. 运行Bloaty:在命令行中,你可以使用bloaty [options] file...命令来运行Bloaty,其中[options]是一组可选的命令行参数,file...是一个或多个要分析的二进制文件的路径。

  3. 理解输出:Bloaty的输出是一个分层的报告,显示了二进制文件中各个部分的大小。你可以使用多个数据源来生成这个报告,例如,你可以同时使用segmentssectionssymbols数据源来查看由段、节和符号占用的空间。

  4. 使用配置文件:如果你有太多的输入文件无法放在命令行中,或者你想重用自定义的数据源,你可以使用配置文件。配置文件是一个Protocol Buffers文本格式的文件,其模式定义在src/bloaty.proto中。

当然可以。假设你有一个名为my_program的二进制文件,你想要分析它的大小。你可以使用以下命令:

bloaty my_program

这将会输出一个报告,显示my_program中各个部分的大小。报告的每一行都对应于一个特定的部分,每一列都对应于一个特定的度量。

如果你想要更详细的报告,你可以使用-d选项来指定数据源。例如,以下命令将会生成一个按照段和符号分组的报告:

bloaty -d segments,symbols my_program

这将会显示出哪些符号在哪些段中占用了空间。


在Bloaty的输出中,FILE SIZEVM SIZE代表了不同的概念:

  • FILE SIZE:这是二进制文件在磁盘上占用的空间大小。这包括了所有的元数据、代码、数据,以及可能存在的填充空间。

  • VM SIZE:这是二进制文件在内存中占用的空间大小。当二进制文件被加载到内存中执行时,只有那些实际需要的部分(例如代码和数据)才会被加载,而元数据和填充空间通常不会被加载。

因此,FILE SIZEVM SIZE的大小可能会有所不同。具体的差异取决于二进制文件的具体内容和结构。


在Bloaty的输出中,每一行都代表一个特定的部分,每一列都代表一个特定的度量。以下是一些常见的度量的含义:

  • FILE SIZE:这是二进制文件在磁盘上占用的空间大小。这包括了所有的元数据、代码、数据,以及可能存在的填充空间²。

  • VM SIZE:这是二进制文件在内存中占用的空间大小。当二进制文件被加载到内存中执行时,只有那些实际需要的部分(例如代码和数据)才会被加载,而元数据和填充空间通常不会被加载²。

  • RATIO:这是FILE SIZEVM SIZE与总文件大小或总虚拟内存大小的比例。

  • SYMBOL:这是符号的名称。符号是二进制文件中的一个实体,例如函数或变量。

例如,以下是一个可能的Bloaty输出:

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  22.0% 1.22Mi   0.0%       0    [Unmapped]
  15.6%   873Ki  57.8%   873Ki    .text
  12.7%   709Ki   0.0%       0    .strtab
   9.8%   547Ki   0.0%       0    .symtab
   6.4%   355Ki  23.5%   355Ki    .rodata
   ...

在这个例子中,.text段占据了文件大小的15.6%,虚拟内存大小的57.8%。[Unmapped]部分占据了文件大小的22.0%,但是它在虚拟内存中并没有占用任何空间,这可能是因为它包含了一些不需要加载到内存中的元数据。

你可能感兴趣的:(我的博客,bloaty)