代码之家  ›  专栏  ›  技术社区  ›  Maestro

挥发性物质的替代品?

  •  3
  • Maestro  · 技术社区  · 13 年前

    我用了很多 volatile 变量,但大多数时候,函数中只有一个点需要确保值是最近的(在开始时)。但函数的其余部分引用了相同的变量名,并且该值可以同时更改,从而产生非常意外的代码流/结果。我知道这可以通过在函数中使用临时变量来解决,但我一直在寻找更好的解决方案。

    现在我想知道,不是把整个变量标记为 不稳定的 ,有没有办法用一个特殊的关键字指示编译器(gcc),我想读取变量,就好像它被标记为volatile一样,这样我就可以在函数开始时只使用一次该关键字?

    2 回复  |  直到 13 年前
        1
  •  0
  •   zwol    13 年前

    我对这个场景有点困惑——如果你想的话 一个特定的访问 到要处理为的变量 volatile 使用

    dest = *(volatile TYPE *)&src;
    

    其中TYPE是 src 。您可能还需要

    asm volatile ("" ::: "memory");
    

    以防止编译器在易失性读取中移动其他存储器位置的加载/存储。

    还要调查C11 _Atomic 类型。(我不确定GCC是否支持这些。)

        2
  •  0
  •   spartacus    13 年前

    如果变量在内存中,并且嵌入式系统支持它,那么可以使用内存屏障。确保在读取值时没有任何东西访问内存。