是达夫的设备仍然有用吗?

问题描述 投票:1回答:1

我看到达夫设备只是做循环展开在C.

https://en.wikipedia.org/wiki/Duff%27s_device

我不知道为什么它仍然是有用的今天。是不是编译器应该足够聪明做循环展开?

gcc clang compiler-optimization loop-unrolling duffs-device
1个回答
2
投票

编译器善于循环展开,但是当编译器不能证明它是正确的,有时“明显”的优化可以得到抑制。在达夫设备情况下,目标是存储器映射的寄存器,并且所述源是任意的指针。如今,内存映射寄存器也很可能被标记为volatile,它不是明确编译器是否能确定是否源和目标指针都不能别名。无论这些有可能会抑制优化。

像的memcpy东西(比达夫设备类似,但不同的)通常已知的是可以具有内置的多个手工优化的变体的编译器。期待编译器生成从“第一原则”的memcpy“特殊”的功能可能不作为产生高度优化的版本,正如您所料。

达夫设备不只是循环展开,但如何处理多余的副本,而无需额外的循环。这样可以节省代码空间,这可能不是一个问题了。无论是编译器做的时候循环展开等价的东西 - 我不知道。

它是有用的?也许,在某些罕见的情况下。这时候,达夫设备最初发明以及可以说是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.