我会将这个问题分解为子问题。如果我应该单独或在一个问题中问他们,我很困惑。所以我会坚持一个问题。
分析和提高C应用程序性能的步骤通常是什么?
如果我正在为嵌入式系统开发,是否会更改这些步骤?
哪些工具可以帮助我?
最近,我被赋予了在ARM11平台上提高产品性能的任务。我对这个嵌入式系统领域比较陌生,需要专家来帮助我。
答案 0 :(得分:4)
答案 1 :(得分:1)
代码审核:
What are good code review techniques ?
代码的静态和动态分析。
静态分析工具:Sparrow,Prevent,Klockworks
Gprof允许您了解程序在何处花费时间以及哪些函数在执行时调用了哪些其他函数。
步骤相同
除了第1点列出的内容外,还有memcheck等工具。 有一个基于平台
答案 2 :(得分:1)
唷!!这是一个很大的问题!
通常采取的步骤是什么 分析并提高C的绩效 应用
除了这里提到的其他静态代码分析器之外,还有一个名为PC-Lint的相当便宜的版本已经存在了很长时间。有时会因为一个错误而抛出大量错误和警告,但最终会因为它而感到高兴并且更多地了解C / C ++。
对于所有代码分析器,一些问题可能对代码更具结构性,因此最好从编码的第1天开始分析;对旧软件进行运行分析可能会让您遇到可能需要一段时间才能解决的问题,最好从一开始就保持清洁。
但代码分析器不会捕获所有逻辑错误,即它不会按照您的要求执行操作!这些最好先通过代码审查,然后进行测试。通过尝试保持算法尽可能简单,保持指令在循环中紧密,可能展开循环(编译器优化可能会这样做),在访问速度很慢的数据时使用快速缓存,通常可以提高性能。
代码审查可能会引起很多其他人看到它的问题。不要让太多的人,如果可能的话尽量让其他3个人,有时候初级开发人员会问最具洞察力的问题,比如“我们为什么要这样做?”。
测试大致可分为自动和手动两部分。自动化测试需要努力为功能/单元生成测试处理程序,但一旦运行可以非常快速地一次又一次地运行。手动测试需要规划,自律以完成所有要求,想象力以考虑可能影响性能的场景并且您必须要观察(您可能已通过测试但是'范围跟踪有点异常在测试之前/之后)。
“如果我这样做,这些步骤会改变吗? 开发嵌入式系统?“
嵌入式系统与应用系统的性能分析可能不同; “嵌入式”现在涵盖的非常广泛的笔刷取决于你以硬件为中心的方式。它可以使用分析器完成,如果你想要一个更便宜和更有价值的方法,那么使用测试输出引脚来测量代码段,或者在开发环境附带的模拟器上使用断点测量它们。
确保不仅测量典型的任务长度,而且确保最大值,因为这是一项任务可能开始阻碍其他任务并且您的计划任务未及时完成的情况。
哪些工具可以 帮帮我?
IDE上的模拟器,静态分析工具,动态分析工具,但最重要的是你和其他人正确的要求,正确的审查(代码和测试)和彻底的测试(自动和手动)。
祝你好运!答案 3 :(得分:1)
我的经历。
#pragma GCC optimize("O3")
标记优化的部分,或单独编译它们。 答案 4 :(得分:0)
由于提出了各种技术,如流程图和状态图,这是一个很难回答的问题,所以你可以看一些标题:
ARM系统级芯片架构,第2版 - Steve Furber
ARM系统开发人员指南 - 设计和优化系统软件 - Andrew N. Sloss,Dominic Symes,Chris Wright&约翰雷菲尔德
ARM Cortex-M3权威指南--Joseph Yiu
嵌入式系统的C编程--Kirk Zurell
嵌入式C - Michael J. Pont
使用C和C ++编写嵌入式系统--Michael Barr
嵌入式软件入门 - 大卫E,西蒙
嵌入式微处理器系统第3版--Stuart Ball
嵌入式系统的全局规范和验证 - 集成异构组件--G。 Nicolescu& A.A Jerraya
嵌入式系统:建模,技术和应用--Gunter Hommel&盛环业
嵌入式系统和计算机架构--Graham Wilson
设计嵌入式硬件--John Catsoulis
答案 5 :(得分:-1)
您必须使用分析器。它将帮助您识别应用程序的瓶颈。然后专注于改善您花费最多时间的功能以及您最常用的功能。重复此过程,直到您对应用程序性能满意为止。
不,他们没有。
取决于您正在开发的平台:
Windows:AMD Code Analyst,VTune,Sleepy
Linux:valgrind / callgrind / cachegrind
Mac:Xcode探测器相当不错。
尝试为您实际工作的体系结构找到一个分析器。