这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.
我们假设:
我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.
理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.
我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.
在采访中提出的一个非常棘手的问题.
交换两个变量的值,如a=10和b=15.
通常要交换两个变量值,我们需要第三个变量,如:
temp=a;
a=b;
b=temp;
Run Code Online (Sandbox Code Playgroud)
现在的要求是,在不使用第三个变量的情况下交换两个变量的值.
我想交换两个整数,我想知道这两个实现中的哪一个会更快:使用临时变量的显而易见的方法:
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
Run Code Online (Sandbox Code Playgroud)
或者我确定大多数人看过的xor版本:
void swap(int* a, int* b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
Run Code Online (Sandbox Code Playgroud)
看起来第一个使用额外的寄存器,但第二个使用三个加载和存储,而第一个只执行两个.有人能告诉我哪个更快,为什么?为什么更重要.
我可以获得一系列常见的C++优化实践吗?
我的意思是优化是你必须修改源代码才能更快地运行程序,而不是改变编译器设置.
我正在改变我的for循环以增加使用++i而不是i++思考,这是否真的有必要了?当然,今天的编译器会自行完成这项优化.
在本文中,http://leto.net/docs/C-optimization.php,从1997年开始迈克尔·李进入其他优化,如内联,循环展开,循环干扰,循环反转,强度降低等等.这些仍然相关吗?
我们应该进行哪些低级代码优化,以及我们可以安全地忽略哪些优化?
编辑:这与过早优化无关.已经做出了优化的决定.现在问题是什么是最有效的方法.
轶事:我曾经审查了一个要求规范:"程序员应该离开一个而不是乘以2".