【发布时间】:2015-07-01 16:37:22
【问题描述】:
当我找到-funroll-all-loops 选项时,我正在阅读optimization options for GCC。
它的描述如下:
展开所有循环,即使它们的迭代次数不确定 循环进入。这通常会使程序运行得更慢。 “-funroll-all-loops”意味着与“-funroll-loops”相同的选项
如果循环的迭代次数在编译时未知,编译器如何展开循环?编译器不需要这些信息来展开它吗?它会生成什么对应的 C 代码,如果它通常会使程序运行得更慢,这在什么情况下会有用?
【问题讨论】:
-
@Olaf 这不是一个具体的问题吗? OP 明确询问 gcc(特定的 C 编译器)如何知道如果循环的边界未知,如何展开循环。
-
@Olaf 如果我想知道特定编译器选项的作用,那它太宽泛了?
-
@paulsm4 我不这么认为。如果编译器已经知道边界,那么决定归结为实际展开多少。这个问题不是问那个。
-
您可能会发现在my answer 到Switch case weird scoping 中有关达夫设备的讨论很有帮助。 (其他海报也提到了达夫的设备。)
标签: c gcc optimization loop-unrolling