2016-09-23 99 views
0

有没有什么办法可以在WindRiver Workbench上使用ccppc为PPC架构编译的vxworks C项目代码
最大的“堆栈使用率”?elf文件的最大堆栈使用

+2

堆栈使用情况可能因运行而异(考虑具有可变深度的递归)。所以不,没有办法。你可以得到一个特定的运行。 –

+0

@EugeneSh。诸如https://www.absint.com/stackanalyzer/index.htm之类的工具会给你带来最坏的情况,并且它会告诉你是否有某个特定的原因无法确定它(例如,你使用非递归递归呼叫次数)。 – nos

回答

0

我不知道一种静态分析堆栈使用情况而不运行任何代码的方法。然而,我可能有两种方法可以给出一个很好的提示:

1)用一些已知的模式填充堆栈(例如0xAA)。执行您的代码一段合理的时间。然后再次分析堆栈以查看堆栈内容被更改的最高点。这种方法已经存在问题,“合理的时间”有多长?

2)在程序执行时取样堆栈指针的值,然后统计堆栈使用量。

As @Eugene Sh。指出可能没有办法在没有运行任何代码的情况下实际获取堆栈使用情况。

1

由于各种显而易见的原因,没有实际的方法可以从静态分析中获得这一点 - 预测程序流程并非无足轻重。对于一个简单的程序来说,但是任何有用的网络接口,配置文件等等系统几乎都不可能建模。递归尤其会导致重大问题。

更多的用途将是运行系统中实际的堆栈使用情况,幸运的是有一个工具可以做到这一点 - checkStack shell命令。

这依赖于使用已知模式初始化的堆栈(我认为是0xEE),然后checkStack查找使用的高位标记 - 即第一个不包含该已知值的位置。

相关问题