【发布时间】:2008-11-28 00:59:03
【问题描述】:
Raymond Chen 在他最近关于代码优化的post 中这么说...如果您考虑到所有需要考虑的因素,那么明显的优化 - 一个需要优化的优化 - 往往是“去优化”。 .
我相信你一定遇到过/甚至在你了解更多之后感到尴尬的编码优化......
愿意分享吗?
【问题讨论】:
标签: optimization
Raymond Chen 在他最近关于代码优化的post 中这么说...如果您考虑到所有需要考虑的因素,那么明显的优化 - 一个需要优化的优化 - 往往是“去优化”。 .
我相信你一定遇到过/甚至在你了解更多之后感到尴尬的编码优化......
愿意分享吗?
【问题讨论】:
标签: optimization
Duff's Device,它是如此扭曲以至于它看起来甚至不应该在 ISO C 中编译:
int n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
【讨论】:
我最喜欢的例子是XOR swap algorithm:
// swap these two values:
int x = 4;
int y = 2;
// original:
int temp = x;
x = y;
y = temp;
// optimized version:
x ^= y;
y ^= x;
x ^= y;
是的,它不使用临时变量,通常可以在三个处理器周期内完成,但它的作用肯定不明显!
【讨论】:
x = y 和 y = temp 可以同时执行。
我最喜欢的是
// original code
int a[10];
a[5] = 3;
// optimized code
int a[10];
*(a + 5) = 3;
是的,突然之间,速度快得惊人!!</sarcasm>
【讨论】:
a+=5 不起作用,因为指向数组的指针无法更改。