我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.
我们假设:
我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.
理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.
我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.
++和 -
已知++(增量)和 - (减量)运算符通过鼓励过多的诡计来导致错误的代码.它们仅次于故障架构,可以实现病毒和其他安全威胁.有一个plusplus选项禁止使用这些运算符.
我知道像PHP这样的PHP结构$foo[$bar++]可能很容易导致一个错误,但是我无法找到一个更好的方法来控制循环而不是一个while( a < 10 ) do { /* foo */ a++; }或for (var i=0; i<10; i++) { /* foo */ }.
jslint是否突出显示它们是因为有些类似的语言缺少" ++"和" --"语法或者处理方式不同,还是有其他理由可以避免我可能会丢失的" ++"和" --"?
我正在阅读Stroustrup的"The C++ Programming Language",他说有两种方法可以向变量添加内容
x = x + a;
Run Code Online (Sandbox Code Playgroud)
和
x += a;
Run Code Online (Sandbox Code Playgroud)
他更喜欢,+=因为它最有可能更好地实施.我认为他的意思是它的工作速度也更快.
但它真的吗?如果它取决于编译器和其他东西,我该如何检查?
在x = x + 1,x评估两次?如果是这样,这意味着什么x += 1,x只评估一次?两个表达式如何根据编译器中间代码进行评估?
例如,x++可能意味着:获取位置x,将内容加载x到寄存器中,并增加x内存中的值.
另外我读过,x += 1当x它不是一个简单的变量,而是一个涉及数组的表达式时很有用.任何想法为什么会这样?
performance ×3
c ×2
c++ ×2
increment ×1
javascript ×1
jslint ×1
operators ×1
optimization ×1
profiling ×1
syntax ×1
unix ×1