我希望不是每个人都在使用 Rational Purify。
那么当你想测量时你会做什么:
- 一个函数花费的时间
- 内存使用峰值
- 代码覆盖率
目前,我们手动完成[使用带有时间戳的日志语句和另一个脚本来解析日志并输出到 excel。呸……)
你会推荐什么?指出工具或任何技术将不胜感激!
编辑:抱歉,我没有首先指定环境,它是专有移动平台上的纯 C
最佳答案
我已经做了很多。如果您有 IDE 或 ICE,there is a technique这需要一些手动操作,但不会失败。
警告:现代程序员讨厌这个,我会被否决。他们喜欢他们的工具。但它确实有效,而且您并不总是拥有好的工具。
我假设在您的情况下,代码类似于在计时器上运行的 DSP 或视频,并且必须很快。假设您在每个计时器刻度上运行的是子例程 A。编写一些测试代码以在一个简单的循环中运行子例程 A,比如说 1000 次,或者足够长的时间让您至少等待几秒钟。
在它运行时,用暂停键随机停止它并对调用堆栈(不仅仅是程序计数器)进行采样并记录下来。 (这是手动部分。)重复几次,例如 10 次。一次是不够的。
现在寻找堆栈样本之间的共性。查找出现在至少 2 个样本上的任何指令或调用指令。会有很多这样的内容,但其中一些将包含在您可以优化的代码中。
这样做,你会得到一个很好的加速,保证。 1000 次迭代将花费更少的时间。
您不需要大量样本的原因是您不是在寻找小东西。就像您在 10 个样本中的 5 个样本中看到一条特定的调用指令,它大约占总执行时间的 50%。如果你真的想知道的话,更多的样本会更准确地告诉你百分比是多少。如果您像我一样,只想知道它在哪里,这样您就可以修复它,然后继续下一个。
一直这样做,直到您找不到更多需要优化的东西,您将达到或接近您的最高速度。
关于c - 你如何分析你的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56672/