当前位置:  开发笔记 > 编程语言 > 正文

强制读取volatile变量

如何解决《强制读取volatile变量》经验,为你挑选了0个好方法。

我正在处理的嵌入式项目需要读取内存中的特定位置,但不需要该内存位置的值.目前我正在将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()似乎工作,但我想知道它是否可以保证工作,并不是我正在使用的编译器版本和优化的副作用.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有