我正在处理的嵌入式项目需要读取内存中的特定位置,但不需要该内存位置的值.目前我正在将volatile变量读入虚拟变量,foo1()
如下所示,但我很好奇这个方法foo2()
.
void foo1(void) { volatile uint32_t *a = (volatile uint32_t *)0xdeadbeef; volatile uint32_t discard = *a; } void foo2(void) { volatile uint32_t *a = (volatile uint32_t *)0xdeadbeef; *a; }
请参阅dissassembly(使用gcc 4.7.2和-O3编译):
foo1: movl 0xdeadbeef, %eax movl %eax, -0x4(%rsp) ret foo2: movl 0xdeadbeef, %eax ret
该方法foo2()
似乎工作,但我想知道它是否可以保证工作,并不是我正在使用的编译器版本和优化的副作用.