gpt4 book ai didi

c - volatile 不会阻止变量被优化

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:32 28 4
gpt4 key购买 nike

据我所知,“volatile”关键字用于防止编译器优化未使用的变量。我正在使用 STM32 开发板,我声明并初始化了一个变量,如下所示;

volatile uint32_t errorCallbackCounter = 24 ;

永远不要再使用它。

调试时,没有看到这个变量。我正在使用 STMStudio(实时变量观察器)检查它,当我想导入变量时,errorCallbackCounter 的地址被视为 0x0。

但是当我在任何地方使用它时,它就变得可见了。

所以 volatile 关键字没有发挥作用,或者 - 更有可能 - 我知道它有问题。

提前致谢。

最佳答案

链接器可以删除从未使用过的变量

volatile 关键字影响访问变量的代码,防止访问 被编译器重新排列或删除。上面的行是一个带有初始值设定项的变量定义,它不算作访问,它在main() 开始之前被安排。但如果它没有被可访问程序代码引用,根本没有访问,链接器认为删除它是安全的,没有人会注意到。 p>

但是您可以将变量标记为“无论如何都需要它”

__attribute__((used))

放在定义的末尾。这适用于 gcc,其他编译器可能有另一个指令。还有一个我现在想不起来的链接器选项,用于在可执行文件中包含所有未使用的数据部分。

关于c - volatile 不会阻止变量被优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57097228/

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