Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc:为什么生成的代码使用-funroll循环--param max unrolled insns=0/1进行更改_C_Loops_Gcc_Compiler Optimization - Fatal编程技术网

gcc:为什么生成的代码使用-funroll循环--param max unrolled insns=0/1进行更改

gcc:为什么生成的代码使用-funroll循环--param max unrolled insns=0/1进行更改,c,loops,gcc,compiler-optimization,C,Loops,Gcc,Compiler Optimization,我在玩gcc的循环展开过程。我注意到,当我指定“-funroll loops--param max unrolled insns=0/1”时,程序的可执行文件大小增加了几十KB 我在一些小型测试台上进行了测试,发现生成的代码具有不同的基本块集——生成的代码非常相似(只是在某些部分进行了粗略的重新排序)。代码大小总是随着我的所有测试台的增加而增加,带有“-funroll循环--param max unrolled insns=0/1”-我不确定基本块之间不同的指令布局将如何导致二进制文件的不同大小

我在玩gcc的循环展开过程。我注意到,当我指定“-funroll loops--param max unrolled insns=0/1”时,程序的可执行文件大小增加了几十KB

我在一些小型测试台上进行了测试,发现生成的代码具有不同的基本块集——生成的代码非常相似(只是在某些部分进行了粗略的重新排序)。代码大小总是随着我的所有测试台的增加而增加,带有“-funroll循环--param max unrolled insns=0/1”-我不确定基本块之间不同的指令布局将如何导致二进制文件的不同大小

为什么生成的代码与“-funroll循环--param max unrolled insns=0/1”不同?调试时,循环展开过程将正确地退出,而不执行任何操作。那么到底是什么导致了这种行为呢


为了禁用循环展开,我总是可以从CFLAGS中删除完整的“-funroll循环--param max unrolled insns=0/1”子句,但我很想知道生成的代码不同的原因。

您了解循环展开的作用吗?如果是这样,为什么您希望看到生成相同的代码?@keshlam,请注意,我通过为“最大展开insns”设置一个非常低的数字来限制循环展开。如果查看循环unroll.c中的代码,该参数用于限制展开的迭代次数。所以我的问题是,这个“-funroll循环--param max unrolled insns=0/1”实际上限制了循环的展开,什么也不做,为什么生成的代码会发生变化?您已经请求编译器通过一个额外的路径。这可能会改变一些代码——也许循环展开也会执行不变提取。如果这不是你想要的,你就不应该给编译器这个机会。