假设我有以下功能:
void atomic_add(volatile unsigned * loc, unsigned incr );
我想将一个变量传递给这个函数的第一个参数。
unsigned a;
atomic_add(&a, 1);
volatile unsigned b;
atomic_add(&b, 1);
从易失性类型限定符,它应该可以被编译。
Q1: 两者得到的结果相同吗?
Q2:
mmap()
返回的指针也可以用作该函数的第一个参数吗?指向 易失性变量的易失性指针和指向易失性变量的区别 非易失性变量
首先
loc
不是volatile pointer
。它是一个引用 volatile object
的指针
您可以将
volatile
而不是 volatile
传递给此函数,在函数中,您的对象将被视为 volatile
。这意味着它将在每次使用之前被读取,并在每次更改后保存到其存储中。它不会在寄存器中“缓冲”。即使您 *loc + *loc
引用的对象也会被读取两次。
要拥有一个易失性指针,您需要以不同的方式声明它:
unsigned * volatile loc; // volatile pointer to not volatile unsigned int object
volatile unsigned * volatile loc; // volatile pointer to volatile unsigned int object
volatile unsigned * loc; // non volatile pointer to volatile unsigned int object
Q1 - 是的
Q2 - 是的