有没有办法获得最大的"堆栈使用"一个vxworks C项目代码
在WindRiver Workbench上使用ccppc
为PPC架构编译?
答案 0 :(得分:1)
由于各种显而易见的原因,没有实际的方法可以从静态分析中获得这一点 - 预测程序流程并非易事。对于一个简单的程序,但是任何有用的系统都有网络接口,配置文件等等几乎不可能建模。特别是递归会引起重大问题。
更多的用法是在正在运行的系统中实际的堆栈使用,幸运的是有一个工具可以做到这一点 - checkStack
shell命令。
这依赖于已经使用已知模式初始化的堆栈(我认为是0xEE),然后checkStack会查找使用的高水位标记 - 即第一个不包含该知名值的位置。 / p>
答案 1 :(得分:0)
我不知道在不运行任何代码的情况下静态分析堆栈使用情况的方法。但是,我知道可能有两种方法可以提供一个好的提示:
1)用一些已知的模式填充堆栈(例如0xAA
)。在合理的时间内执行您的代码。然后再次分析堆栈以查看堆栈内容被更改的最高点。这种方法已经存在一个问题,即合理的时间长度"?
2)在程序执行时对Stack Pointer的值进行采样,然后对堆栈使用量进行统计猜测。
作为@Eugene Sh。指出,如果不运行任何代码,可能无法实际获得堆栈使用。