|
1
4
编译器必须做的事情是 "alias analysis" 。
如果编译器能证明
对于以下情况,这是一个非常有用的优化
如果输入可能重叠,编译器可以(和 做 )发出代码 支票 用于重叠 如果没有重叠,则运行优化(例如自动矢量化)循环,如果有重叠,则运行安全循环。
如果编译器
不能
证明转换将给出与C抽象机相同的最终结果,但它不能进行转换。(我说“final”是因为存储到内存的顺序不是可观察结果的一部分,除非您使用
“好像”规则只允许在
全部的
不导致UB的案例
,包括诸如
UB是允许进行某些优化的关键(例如不在循环内重做有符号数组索引的符号扩展)。看见 What Every C Programmer Should Know About Undefined Behavior #1/3 。 |
|
|
Bogey · C#共享内存-CPU缓存风险(非易失性读取)? 8 年前 |
|
|
filo · 如何在x86上使用gcc强制执行内存排序 8 年前 |
|
|
maxim1 · Java中的易失阵列、内存障碍和可见性 10 年前 |
|
paddy · 双原子自旋锁的最小限制存储器排序 10 年前 |