静态测量C中方法所需的最大堆栈内存

静态测量C中方法所需的最大堆栈内存,c,windows,gcc,arm,eabi,C,Windows,Gcc,Arm,Eabi,我有大量用C编写的方法,它们分布在多个文件中,并且都创建局部变量(主要是结构实例)。 在Windows上使用ARM EABI GCC编译器编译这些文件之后,我尝试使用objdump检查.o对象文件 arm-none-eabi-objdump.exe -f -p -h -x -d -s -t test.o > test.txt 我的问题是: 如何计算/检索方法使用的峰值堆栈内存? 这些方法都没有使用malloc分配任何动态分配的内存。所以,我希望这会更容易 我需要这个,因为我需要比较使用各

我有大量用C编写的方法,它们分布在多个文件中,并且都创建局部变量(主要是结构实例)。 在Windows上使用ARM EABI GCC编译器编译这些文件之后,我尝试使用objdump检查.o对象文件

arm-none-eabi-objdump.exe -f -p -h -x -d -s -t test.o > test.txt
我的问题是: 如何计算/检索方法使用的峰值堆栈内存?

这些方法都没有使用malloc分配任何动态分配的内存。所以,我希望这会更容易

我需要这个,因为我需要比较使用各种优化选项编译时每个方法使用的内存量。这是为了检查是否执行了任何本地内存优化。
我还了解到,对于某些局部变量,编译器可能会使用寄存器。但是,我只需要知道一个方法所需的最大堆栈内存是多少,或者是否有方法计算它。

通过反汇编,查找
push
sub-sp,sp,#x
指令?是的,我想就是这样!奇怪的是,这样的搜索并没有显示这个结果。谢谢你,迈克尔@埃尔罗伊:我发现使用谷歌搜索SO通常比SO的搜索结果更好。只需在查询中删除一个“site:stackoverflow.com”。实际上,该答案中的建议不起作用
gcc
将延迟调整堆栈以进行某些优化,这将提高堆栈使用率,从而提高性能。矛盾的是,更高的优化级别将在寄存器中加载更多的局部变量,从而减少使用。因此,即使结合调用图的
-fstack用法
也是有缺陷的;您需要知道
内联
函数何时从堆栈中删除其局部变量。见: