如何在 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
构建期间:
对于VC++ 运行 link.exe /map
.
对于 GCC 运行 ld -Map
.
这两个选项都会生成一个地图文件,其中将包含分段大小。
您可以使用 objdump
获取 Linux 系统上的文本、数据和 bss 段的大小。您可以检查 .bss
和 .text
部分的输出。
有关更详细的说明,请参阅 here。
我需要对一个用 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
构建期间:
对于VC++ 运行
link.exe /map
.对于 GCC 运行
ld -Map
.
这两个选项都会生成一个地图文件,其中将包含分段大小。
您可以使用 objdump
获取 Linux 系统上的文本、数据和 bss 段的大小。您可以检查 .bss
和 .text
部分的输出。
有关更详细的说明,请参阅 here。