const的深度学习及volatile关键字介绍

const是编译器器在编译期间,可能对代码进⾏行行优化。

#include <stdio.h>
int main()
{
const int n = 10;
int *p = (int *)&n;
*p = 20;
printf("%d\n", n);
return 0;
}

只要编译器器适当的对代码进⾏行行优化,这⾥里里就可能输出:10,⽽而不不是我们改变之后的值。

当编译器器看到这⾥里里的num被const修饰,从语义上讲这⾥里里的num是不不期望被改变(不不改变)
的,那优化的时候就可以把num的值存放到寄存器器(以提⾼高访问的效率)中。以后只要使⽤用
num的地⽅方都去寄存器器中取,那即使num对应的内存中的值发⽣生变化,寄存器器也是感知不不到

的。所以造成输出10的结果。

#include <stdio.h>
int main()
{
// 使⽤用 volatile 关键字对 num 修饰。
volatile const int n = 10;
int *p = (int *)&n;
*p = 20;
printf("%d\n", n);
return 0;
}

这⾥里里我们可以看到,当我们对*p做了了修改之后,num的输出变成了了20

编译时不不优化,执⾏行行时不不缓存,每次需从内存中读出(保证内存的可⻅见性)。

static关键字⽤用于修改标示符的链接属性。


猜你喜欢

转载自blog.csdn.net/mashui21/article/details/80206174