15

const volatile我可以看到合格变量 的实际用途,例如

const volatile uint64_t seconds_since_1970;

如果底层硬件机制每秒更新一次值,但变量在(可能是嵌入式的)硬件中不可写。并且由于所有三个(C11 中为四个)类型限定符都被认为是独立的,所有组合似乎都是允许的。但是我无法想象一个restrict volatile合格的指针真正有意义的现实情况:

uint32_t * restrict volatile pointer_to_some_uint32;

[编辑:澄清:两者都volatile适用restrict于指针,而不是指向的对象!]

这是语言允许但本身无用的构造,还是我错过了一些有价值的应用领域?

4

1 回答 1

11

如果没有限制,非易失性指针可以别名为易失性指针。因此,在通过 volatile 指针对对象进行每次修改后,必须丢弃所有可能被指针引用的相同类型对象的寄存器缓存值。

使用限制,您可以告诉编译器 volatile 指针不会别名,因此 volatile 的开销仅适用于指向的对象,而不适用于可能通过指针访问的所有其他相同类型的对象。

于 2012-01-24T15:24:48.523 回答