近段时间在学习C语言,看到了volatile这个关键字,同时参考了一下网上的例子。
int test(volatile int ptr) { int a, b; a = ptr; b = ptr; return a + b; }
上面这段代码在加volatile与不加产生的汇编码如下:
#加volatile关键字的汇编码: test: .LFB0: .cfi_startproc movl %edi, -4(%rsp) movl -4(%rsp), %edx movl -4(%rsp), %eax addl %edx, %eax ret .cfi_endproc
#不加volatile关键字的汇编码 test: .LFB0: .cfi_startproc leal (%rdi,%rdi), %eax ret .cfi_endproc
终上所述得出的结论为:
加关键字会让编译器不去做优化