我可以看到const volatile
限定变量的实际用途,比如
const volatile uint64_t seconds_since_1970;
如果底层硬件机制每秒更新一次值,但该变量在(可能是嵌入式)硬件中不可写。
由于所有三个(C11中的四个)类型限定符都被认为是独立的,因此似乎允许所有组合。但我无法想象一个真实的情况,restrict volatile
合格的指针真的有意义:
uint32_t * restrict volatile pointer_to_some_uint32;
[编辑:澄清:volatile
和restrict
都适用于指针,而不适用于指向的对象!]
这是语言所允许的构造,但本身是无用的,还是我错过了一些可能有价值的应用领域?
答案 0 :(得分:8)
不受限制,非易失性指针可以为易失性指针设置别名。因此,在通过易失性指针对对象进行每次修改之后,必须丢弃所有相同类型的潜在指针引用对象的寄存器缓存值。
使用restrict,您可以告诉编译器volatile指针不会别名,因此volatile的开销只适用于指向的对象,而不是所有其他可能通过指针访问的相同类型的对象。