2
在這個簡單的C11程序爲什麼GCC可以在C11 atomic_load中消除內存障礙?
#include <stdatomic.h>
int f(atomic_int* obj) {
return atomic_load(obj);
}
我期望所產生的組件將包括存儲器屏障。即使負載本身可能是原子,CPU也可能在整個調用過程中推測(即移動)f
的調用者中的此內存位置的一些讀取。然而,gcc -O
輸出:
.file "repro.c"
.text
.globl f
.type f, @function
f:
.LFB0:
.cfi_startproc
movl (%rdi), %eax
ret
.cfi_endproc
.LFE0:
.size f, .-f
.ident "GCC: (GNU) 4.9.1"
.section .note.GNU-stack,"",@progbits
爲什麼是不是一個內存屏障需要在這裏?
可能通過以下方式回答x86:http://stackoverflow.com/questions/4972106/sequentially-consistent-atomic-load-on-x86 – jcoder