volatile关键字

1. volatile作用

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

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

2. sample

2.1 无修饰默认编译场景

volatile.c文件如下:

#include <stdio.h>
#include <signal.h>
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 <stdio.h>
#include <signal.h>
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号信号
进程正常退出!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天选码农搬砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值