use*_*739 4 gcc clang compiler-optimization duffs-device loop-unrolling
我看到 Duff 的设备只是在 C 中进行循环展开。
https://en.wikipedia.org/wiki/Duff%27s_device
我不知道为什么它现在仍然有用。编译器不是应该足够聪明来进行循环展开吗?
编译器擅长循环展开,但有时当编译器无法证明它是正确的时,可以抑制“明显”优化。在 Duff's Device 案例中,目标是内存映射寄存器,源是任意指针。今天,内存映射寄存器可能必须被标记为,volatile并且不清楚编译器是否可以确定源指针和目标指针是否可以别名。这些中的任何一个都可能会抑制优化。
像 memcpy(类似于但不同于 Duff 的设备)之类的东西通常是编译器已知的“特殊”函数,可能内置多个手动优化的变体。期望编译器根据“第一原则”生成 memcpy 可能不会产生如您所料,高度优化的版本。
Duff's Device 不仅仅是循环展开,而是如何在没有额外循环的情况下处理多余的副本。这节省了代码空间,现在这可能不是问题。循环展开时编译器是否做同样的事情——我不知道。
有用吗?可能,在某些罕见的情况下。当达夫的装置最初被发明时,这可以说是正确的。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |