考虑这个例子:
$.magnificPopup.open({
items: {
src: '#modifyDialog',
type: 'inline',
focus: '#engTxtareaModify',
},
modal: true,
fixedContentPos: true,
callbacks: {
open: function () {
var html = "<button title='Close (Esc)' type='button' class='mfp-close'></button>";
$('.modifyDialog').append(html);
}
}
})
当使用-Os编译时,clang-6.0在x64上为f和g生成相同的.mfp-close { color: #333; }
指令模式(参见https://godbolt.org/g/hUPprL),而gcc-7.3生成此指令(参见{{3}) })对于f():
volatile unsigned int x;
unsigned int y;
void f() {
x /= 2;
}
void g() {
y /= 2;
}
这只是一个错过的优化,还是有理由让gcc在易失性访问时拒绝shrl <offset>(%rip)
?谁错了?
答案 0 :(得分:4)
这只是gcc错过的优化。这两种实现都精确地保留了对x
的读取和写入,因此是正确的。
“在引擎盖下”操作内存操作数执行与更长实现相同的加载和存储。