当前位置:  开发笔记 > 人工智能 > 正文

热闹[或不那么热闹]代码优化

如何解决《热闹[或不那么热闹]代码优化》经验,为你挑选了3个好方法。

Raymond Chen在他最近关于代码优化的帖子中有这样的说法......明显的优化 - 一个需要优化的优化 - 如果考虑所有需要考虑的话,往往会"去优化"...

在您了解更多信息后,我确信您必须遇到/甚至编码优化您感到尴尬...

小心分享?



1> Matt Campbel..:

Duff的设备,它是如此扭曲,看起来它甚至不应该在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);
}



2> e.James..:

我最喜欢的例子是XOR交换算法:

// 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;

是的,它不使用临时变量,通常可以在三个处理器周期内完成,但确实不明显它的作用!


这种"优化"增加了数据依赖性,其中原件可以通过寄存器重命名由硬件处理.实际上,原版很可能会采用*零*周期.
因为第2行在第1行完成之前无法执行,第3行在第2行完成之前无法执行.所以CPU会爆炸很长时间然后停下来然后去"1,2,3"然后继续前进.相反,`x = y`和`y = temp`可以同时执行.
这对我来说是一个特别的烦恼 - 人们使他们的代码可读性降低,因为,OMG,他们不想在堆栈中添加额外的4个字节.这些人在英特尔4004或RCA 1802 CPU上运行的是什么?

3> Johannes Sch..:

我最喜欢的是

// original code
int a[10];
a[5] = 3;

// optimized code
int a[10];
*(a + 5) = 3;

是的,突然间,这神奇地加快了!!


哦,是的,指针数学.我很高兴我切换到托管语言的另一个原因.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有