gpt4 book ai didi

c - 历史上推荐使用的 x86 中哪些 C 语言优化实践不再有效?

转载 作者:太空狗 更新时间:2023-10-29 16:23:50 25 4
gpt4 key购买 nike

由于 x86 C 编译器(即 GCC 和 Clang)的进步,许多被认为可以提高效率的编码实践不再使用,因为编译器可以比人类更好地优化代码(例如 bit shift vs. multiplication) .

具体有哪些做法?

最佳答案

在通常推荐的优化中,有一些在现代编译器下基本上不会产生效果的优化包括:

数学变换

现代编译器理解数学,并会在适当的时候对数学表达式执行转换。

现代编译器已经执行了诸如将乘法转换为加法,或者将常量乘法或除法转换为移位等优化,即使是在低优化级别。这些优化的示例包括:

x * 2  ->  x + x
x * 2 -> x << 1

请注意,某些特定 情况可能会有所不同。例如,x >> 1x/2 不同;以一种代替另一种是不合适的!

此外,许多建议的优化实际上并不比它们替换的代码快。

愚蠢的代码技巧

我什至不知道该怎么调用它,但是 XOR 交换 (a ^= b; b ^= a; a ^= b;) 之类的技巧根本不是优化。它们只是聚会的把戏——它们比显而易见的方法更慢、更脆弱。不要使用它们。

register 关键字

这个关键字被许多现代编译器忽略,因为它的预期含义(强制将变量存储在寄存器中)在当前的寄存器分配算法中没有意义。

代码转换

编译器将在适当的时候自动执行各种代码转换。一些此类转换经常被推荐用于手动应用,但在应用时很少有用,包括:

  • 循环展开。(这在不加区别地应用时通常实际上是有害的,因为它会使代码大小膨胀。)
  • 函数内联。(将函数标记为 static,当启用优化时,它通常会在适当的地方内联。)

关于c - 历史上推荐使用的 x86 中哪些 C 语言优化实践不再有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com