我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.
我们假设:
我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.
理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.
我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.
这绝对是主观的,但我想尽量避免它变得有争议.我认为如果人们适当地对待它可能是一个有趣的问题.
对这个问题的想法来自评论跟帖从我的回答到:"你恨你喜欢的语言什么的五件事?" 问题.我争辩说C#中的类应该默认密封 - 我不会把我的推理放在这个问题上,但我可以写一个更全面的解释作为这个问题的答案.我对评论中讨论的热度感到惊讶(目前有25条评论).
那么,你持有什么有争议的意见?我宁愿避免那种以相对较少的基础(例如括号放置)而变得非常宗教的东西,但是例子可能包括诸如"单元测试实际上并不十分有用"或"公共领域真的很好"之类的东西.重要的是(对我来说,无论如何)是你有理由支持你的意见.
请提出您的意见和推理 - 我鼓励人们投票支持有争议和有趣的意见,无论您是否恰好同意这些意见.
我有一个程序,由几个.h和.c文件和许多函数组成.还有一些功能可以调用其他功能等.现在,这实际上是一项任务,所以我知道该计划需要多长时间才能达到目的.
问题是,与我给出的时间相比,我的程序花费了太多时间.是否有可能找出哪个函数花费了太多时间或者代码的哪个部分使程序停止运行?
我没有在这里给出代码,因为它太长了.我知道没有人能回答为什么"我的节目"很慢但我说话一般!是否有工具可以衡量每个功能需要多长时间或类似的功能?我正在使用gcc,我在Linux上.
我注意到我的代码运行的10%是系统空间.但是,我不知道哪个系统调用.我怀疑,它要么必须做文件或时间戳.
有没有工具来确定哪些系统调用是罪魁祸首?另外,我想知道调用(和被调用者)的频率(和位置).
我在AS3上
谢谢
performance ×3
c ×2
c++ ×2
profiling ×2
unix ×2
gprof ×1
optimization ×1
profiler ×1
system-calls ×1
time ×1