如何在 C++ 中获取数据段大小

How to get Data Segment Size in C++

我需要对一个用 C++ 编写的库的内存需求进行分析,因为硬件工程师需要了解我们硬件的内存需求,目前正在进行中。我可以测量 heapsize 峰值,我可以 measure stack size, but I don't know how to estimate/measure data segment size 和 Bss 大小。 Visual Studio 或 GCC 中有什么方法吗?我认为它会因编译器和平台而异,但估计对我来说很好。

有一个 size 实用程序。 例如。对于 ARM MCU 项目,它可以是这样的:

arm-none-eabi-size --format=sysv "program_name.elf"

示例输出:

program_name.elf  :
section             size        addr
.text              14516           0
.data                160   268435456
.bss                1328   268435616
.stack              2528   268436944
.debug_aranges      2384           0
.debug_info        40951           0
.debug_abbrev       8870           0
.debug_line        27790           0
.debug_frame        6664           0
.debug_str         42157           0
.debug_loc          7074           0
.debug_macinfo    426030           0
.ARM.attributes       47           0
.debug_ranges       1760           0
.comment              96           0
.debug_macro        9236           0
Total             591591

构建期间:

这两个选项都会生成一个地图文件,其中将包含分段大小。

您可以使用 objdump 获取 Linux 系统上的文本、数据和 bss 段的大小。您可以检查 .bss.text 部分的输出。

有关更详细的说明,请参阅 here