gpt4 book ai didi

c - C 中的全局是否隐式易变?

转载 作者:行者123 更新时间:2023-12-04 12:08:32 32 4
gpt4 key购买 nike

我的问题很简单。当您想告诉编译器变量可能会在其使用范围之外发生变化时,关键字 volatile 是必需的,例如嵌入式系统中的内存映射变量或可以响应从接收到的信号而发生变化的信号处理程序变量操作系统。
[删除了关于线程通信的部分,因为它只会产生困惑,这不是我的问题]。
[使用下面的评论重新表述问题以澄清]

我想 OP 在问什么,是 volatile 是否会增加变量的全局性质尚未施加的进一步限制(事实上,它是全局的,对编译器施加了某些限制,类似于 volatile 强制要求的限制) .

最佳答案

Is a global implicitly volatile in C?



不。

您对 extern 感到困惑变量和 volatile变量,因为它们都不能被编译器完全优化,因为它们都可以在外部修改。
但这并不意味着它们具有相同的语义。

考虑 Link Time Optimzation这对于全局变量是可能的。这意味着,编译器完全有可能获得关于全局变量的完整信息,从而像任何其他变量一样对其进行相应的优化。
但是 volatile意味着编译器不能对此有任何假设。因为它可以在运行时从外部修改。

因此:
volatile int vol_global_var;


int nonvol_global_var;

不能一视同仁。因为,有了足够的信息,编译器就可以完全优化掉 nonvol_global_var .但它永远不能为 vol_global_var 做到这一点.

那么,你什么时候创建一个全局变量 volatile限定在决定何时将任何变量设为 volatile 没有什么不同合格的。

关于c - C 中的全局是否隐式易变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40614016/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com