考虑以下:
volatile uint32_t i;
我如何知道 gcc 是否将 i 视为 volatile?它将被声明为这样,因为附近没有代码会修改它,并且修改它很可能是由于一些中断。
我不是世界上最差的汇编程序员,但我在电视上玩过一个。有人可以帮我理解它会有什么不同吗?
如果您采用以下愚蠢的代码:
#include <stdio.h>
#include <inttypes.h>
volatile uint32_t i;
int main(void)
{
if (i == 64738)
return 0;
else
return 1;
}
编译成object格式,通过objdump反汇编,去掉'volatile'后也一样,没有区别(根据diff)。volatile 声明是否太接近其检查或修改的位置,还是在声明 volatile 时我应该总是使用某种原子类型?一些优化标志会影响这一点吗?
请注意,我的愚蠢样本与我的问题不完全匹配,我意识到这一点。我只是想知道 gcc 是否将变量视为 volatile,因此我正在研究小型转储以尝试找出差异。