2014-07-22 56 views
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 

爲什麼是不是一個內存屏障需要在這裏?

+0

可能通過以下方式回答x86:http://stackoverflow.com/questions/4972106/sequentially-consistent-atomic-load-on-x86 – jcoder

回答