gpt4 book ai didi

c - 从优化为循环不变的循环中的结构指针取消引用成员吗?

转载 作者:行者123 更新时间:2023-12-03 17:17:39 25 4
gpt4 key购买 nike

假设我在 C99 中有 for(int j=0; j < t->k; j++) , t->k在整个循环迭代中不会改变。编译器是否优化了这一行,或者每次循环迭代都会有一个取消引用操作?

换句话说,会

tmpk = t->k;
for(int j = 0; j < tmpk; j++)

对大量迭代更好?

最佳答案

在一般情况下,这取决于 t 是否被声明为 restrict;在没有显式别名限制的情况下,编译器不能假定没有其他指针提供修改 k 的路径。

当然,如果编译器可以通过检查循环体来证明t->k 是不变的,它可能会选择将解引用移出循环体,或者错误地这样做,如果优化器有问题。

在局部变量中显式缓存 t->k 的值会更可靠地强制解决这个问题。 :-)

关于c - 从优化为循环不变的循环中的结构指针取消引用成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25130341/

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