![]() |
1
4
编译器必须做的事情是 "alias analysis" 。
如果编译器能证明
对于以下情况,这是一个非常有用的优化
如果输入可能重叠,编译器可以(和 做 )发出代码 支票 用于重叠 如果没有重叠,则运行优化(例如自动矢量化)循环,如果有重叠,则运行安全循环。
如果编译器
不能
证明转换将给出与C抽象机相同的最终结果,但它不能进行转换。(我说“final”是因为存储到内存的顺序不是可观察结果的一部分,除非您使用
“好像”规则只允许在
全部的
不导致UB的案例
,包括诸如
UB是允许进行某些优化的关键(例如不在循环内重做有符号数组索引的符号扩展)。看见 What Every C Programmer Should Know About Undefined Behavior #1/3 。 |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |