C语言 ARM 上的堆和堆栈测量



我有一个为ARM编译的C代码,然后在ARM设备上运行。我对程序的内存使用情况感兴趣,即堆和堆栈分配。

有没有工具可以让我衡量这些值?到目前为止,我得到的只是 armlink 的链接器输出,但使用这些值我无法计算堆和堆栈。我目前正在使用 ARM 工作台 IDE,但我找不到与此问题相关的任何内容。

一般来说,堆和堆栈的使用都必须测量,你不能静态地分析代码并弄清楚它们。

幸运的是,在嵌入式代码中,跳转到代码通常更容易,例如 malloc()并使其包含测量值,然后可以使用调试器进行检查。

堆栈

使用情况有时可以更被动地测量,方法是用一些已知数据填充堆栈空间,并检查应用程序用实际数据覆盖填充器时留下的"高水位线"。

当然,这两种方法都需要执行程序,即使其通过使用这些资源的各种代码路径运行(同样,这是一个动态测量,而不是静态分析(。

实际上,你可以通过GCC编译器选项-fstack-usage和一个名为 avstack.pl 的perl脚本来深入了解堆栈使用情况,该脚本会生成调用图。有关 perl 脚本的信息,请参阅文档和脚本本身的 https://dlbeer.co.nz/oss/avstack.html。您需要按照文档中的指示修改脚本。这并不理想,但它是我迄今为止见过的最好的开源解决方案。

最新更新