我正在为微 Controller 开发一些软件,我希望能够轻松查看软件的哪些部分使用了多少内存。该软件不使用动态内存分配,我只对静态内存分配(bss 和数据部分)感兴趣。
所有这些静态内存实际上是单个结构的一部分,它包含程序使用的(大部分)内存。这是结构的层次结构,对应于程序的组件。例如:
结构整个程序{
诠释 x;
结构组件A;
结构组件 B;
};
结构组件A {
诠释y;
结构组件C;
结构 ComponentD d;
};
...
结构 WholeProgram whole_program;
理想情况下,我希望看到用多级饼图表示的内存使用情况。
我找不到任何可以下降到这样的结构的东西,只有打印全局变量大小 (nm) 的程序。这对我来说不是很有用,因为它只会告诉我 WholeProgram
结构的大小,而没有关于其部分的任何详细信息。
注意解决方案一定不能是解析代码的程序形式。这对我来说是 Not Acceptable ,因为我使用了很多 C++ 模板元编程,程序肯定无法处理。
如果这样的工具不可用,我会对检索此内存使用信息的方法(从二进制文件或编译器)感兴趣。
最佳答案
您可以通过让链接器直接输出映射文件来获取相同的信息(可能更多),而不是使用 nm。然而,这可能无法解决您的问题 - 结构的内部偏移量可以由编译器解决,符号会被丢弃,因此不需要在最终链接映射中可见 - 仅保留外部引用以用于链接目的。
但是,实现目标所需的信息必须可供调试器使用(因为它能够扩展结构),因此一些工具可以解析编译器的特定调试信息 - 甚至可能是调试器本身 - 但那就是不可能,我想您必须自己编写这样的工具。
GDB debug info parser/description 的答案可能有帮助。
关于c++ - 静态内存使用的层次概述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26200947/