如何在C中计算一个模块的文本、rodata、数据和bss大小?

How to calculate text, rodata, data and bss sizes of one module in C?

在我的项目中,我首先从文件夹 A 编译 aa_1.caa_2.c...,然后从 bb_1.c bb_2.c...文件夹 B。然后我用gcc-ar生成libapps.a。最后,我 link 与其他静态库。

现在我想计算文件夹 Atextrodatadatabss 部分。

我的方法是执行gcc-nm -S --size-sort folder/*.o,累积textrodatadatabss段。但是有些函数可能会被优化掉,因为它们从未被调用过。

那么如何计算 textdatarodatabss 尺寸?

我还有一个问题,使用gcc-nm -S --size-sort a.o没有'b'类型。但是使用 gcc-size a.o 显示 bss 部分是 8 个字节。那么哪一个是正确的?

根据 Get list of static libraries used in an executable,库名称在 linking 过程中被丢弃。

您可以将-Xlinker -Map=file.map添加到link命令中,然后尝试从'file.map'中提取信息。