【问题标题】:How to calculate text, rodata, data and bss sizes of one module in C?如何计算 C 中一个模块的文本、rodata、数据和 bss 大小?
【发布时间】:2019-11-01 11:40:58
【问题描述】:

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

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

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

那么我如何计算textdatarodatabss 的大小?

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

【问题讨论】:

  • 看看readelf -S。它将报告可用于计算大小的每个部分的地址。
  • But some functions may be optimized away because they're never called. - 您只知道 创建可执行文件时执行最终链接。因此,这样的计算必须在生成可执行文件后进行。

标签: c gcc static-libraries


【解决方案1】:

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

您可以在链接命令中添加-Xlinker -Map=file.map,然后尝试从“file.map”中提​​取信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多