volatile关键字

1. volatile作用

volatile是C语言的一个关键字,该关键字的作用是保持内存的可见性

  • volatile修饰的变量会防止编译器优化;
  • CPU每次操作变量都会从内存读取数据;

2. sample

2.1 无修饰默认编译场景

volatile.c文件如下:

#include 
#include 
int flag = 0;
void handle(int signo)
{
	printf("收到一个 %d号信号\n",signo);
	flag = 1;
}
int main()
{
	signal(2,handle);//捕获2号信号
	while(!flag);
	printf("进程正常退出!\n");
	return 0;
}

编译:

gcc volatile.c

运行:

./a.out
^C收到一个 2号信号  (此处需要按住ctrl+c结束运行)
进程正常退出!

2.2 编译优化

编译:

gcc volatile.c -O3

运行:

./a.out 
^C收到一个 2号信号
^C收到一个 2号信号
^C收到一个 2号信号

由上可以看到ctrl+c无法结束运行

2.3 加入volatile修饰

#include 
#include 
volatile int flag = 0;
void handle(int signo)
{
	printf("收到一个 %d号信号\n",signo);
	flag = 1;
}
int main()
{
	signal(2,handle);//捕获2号信号
	while(!flag);
	printf("进程正常退出!\n");
	return 0;
}

编译:

gcc volatile.c  -O3

运行:

 ./a.out 
^C收到一个 2号信号
进程正常退出!

你可能感兴趣的:(编程题或面试题,c语言)