gpt4 book ai didi

c - gcc优化的解释

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

出于黑客的好奇心,我想知道gcc 是如何巧妙地优化下面的函数的?

int c() {
int i, j = 0;
for (i = 0; i < 10; i++) {
j += i;
}
return j;
}

$objdump -D c.o 下面是针对 arm 但 x86 在逻辑上没有什么不同。

00000000 <c>:
0: 202d movs r0, #45 ; 0x2d
2: 4770 bx lr

我主要想知道这是优化链还是类似模板匹配的结果?是否有关于此类优化的文档?

最佳答案

优化器分阶段/通过执行此操作...当您指定 -O2 时,会启用许多优化。此处发挥作用的主要优化是

  1. loop unrolling
  2. constant propagation
  3. constant folding
  4. dead-code elimination

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

所以这段代码

int i, j = 0;
for (i = 0; i < 10; i++) {
j += i;
}
return j;

循环展开后变成

int i, j = 0;
i=0; j += i;
i=1; j += i;
i=2; j += i;
i=3; j += i;
i=4; j += i;
i=5; j += i;
i=6; j += i;
i=7; j += i;
i=8; j += i;
i=9; j += i;
return j;

在不断传播之后

int i, j = 0;
i=0; j += 0;
i=1; j += 1;
i=2; j += 2;
i=3; j += 3;
i=4; j += 4;
i=5; j += 5;
i=6; j += 6;
i=7; j += 7;
i=8; j += 8;
i=9; j += 9;
return j;

死代码消除后

j = 0;
j += 0;
j += 1;
j += 2;
j += 3;
j += 4;
j += 5;
j += 6;
j += 7;
j += 8;
j += 9;
return j;

constant folding之后

j = 45;
return j;

最后,

return 45;

关于c - gcc优化的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953649/

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