性能或代码大小的C编码实践 - 超出了编译器的作用

5 c optimization gcc micro-optimization

我正在寻找程序员在C中可以做什么,它可以确定生成的目标文件的性能和/或大小.

例如,
1.将简单的get/set函数声明为inline可能会提高性能(以更大的占用空间为代价)
2.对于不使用循环变量本身值的循环,倒计时到零而不是计数到一定的价值等

看起来编译器现在已经发展到了一个"简单"技巧(如上面的两点)根本不需要的水平.编译期间适当的选项无论如何都可以完成工作.哎呀,我还看到了关于编译器如何处理递归的帖子 - 这非常有趣!那么我们还要做什么呢?:)

我的具体环境是:GCC 4.3.3重新针对ARM架构(v4).但是对其他编译器/处理器的响应也是受欢迎的,并且将被扼杀.

PS:我的这种做法违背了通常的"代码优先!然后基准,最后优化"的方法.

编辑:就像它发生的那样,在发布问题之后我发现了一个类似的帖子:我们还应该优化"在小"吗?

Mar*_*n B 6

我可以想到的一件事,编译器可能不会优化"缓存友好性":如果你以行主要顺序迭代二维数组,比如说,确保你的内部循环遍及列索引避免缓存颠簸.内循环运行错误的索引可能会导致巨大的性能损失.

这适用于所有编程语言,但如果您使用C编程,性能可能对您很重要,因此它尤为重要.


Sam*_*ell 5

"始终"了解算法的时间和空间复杂性.编译器永远无法完成这项工作.:)