【发布时间】:2014-10-05 08:28:59
【问题描述】:
我正在为微控制器开发一些软件,我希望能够轻松查看软件的哪些部分正在使用多少内存。该软件不使用动态内存分配,我只对静态内存分配(bss 和 data 部分)感兴趣。
所有这些静态内存实际上是单个结构的一部分,其中包含程序使用的(大部分)内存。这是结构的层次结构,对应于程序的组件。例如:
struct WholeProgram {
int x;
struct ComponentA a;
struct ComponentB b;
};
struct ComponentA {
int y;
struct ComponentC c;
struct ComponentD d;
};
...
struct WholeProgram whole_program;
理想情况下,我希望看到用多级饼图表示的内存使用情况。
我找不到任何可以归结为这样的结构的东西,只有打印全局变量 (nm) 大小的程序。这对我来说不是太有用,因为它只会告诉我WholeProgram 结构的大小,而没有关于其部分的任何详细信息。
请注意,解决方案一定不能采用解析代码的程序的形式。这对我来说是不可接受的,因为我使用了大量的 C++ 模板元编程,而程序肯定无法处理。
如果这样的工具不可用,我会对检索此内存使用信息的方法(从二进制文件或编译器)感兴趣。
【问题讨论】:
-
您的示例结构不使用任何内存,除非它们被显式实例化,然后这取决于您创建的实例数量。
-
@Clifford 我有一个根 WholeProgram 结构的实例。
-
您可以简单地检查/查看程序链接产生的 .map 文件,以确定程序每个段的大小。
-
@user3629249 :在大多数链接器中,这只会告诉您
whole_program的大小 - 这不是被要求的。