longjmp setjmp and volatile
/*******************************************************************************
* 版权所有:
* 模 块 名:
* 文 件 名:volatile_setjmp.c
* 实现功能:
* 作 者:XYZ
* 版 本:V1.0
* 日 期:2013.11.15
* 联系方式:xiao13149920@foxmail.com
********************************************************************************/
// volatile_setjmp.c
#include<stdio.h>
#include<stdlib.h>
#include<setjmp.h> static jmp_buf env; static void do_jump(int nvar, int rvar, int vvar)
{
printf("Inside do_jump(): nvar:%d, rvar:%d, vvar:%d\n", nvar, rvar, vvar);
longjmp(env, );
} int main(int argc, char *argv[])
{
int nvar;
register int rvar; // allocated in register if possible
volatile int vvar; // see text nvar = ;
rvar = ;
vvar = ; if (setjmp(env) == )
{
nvar = ;
rvar = ;
vvar = ;
do_jump(nvar, rvar, vvar);
}
else
{
printf("After do_jump(): nvar:%d, rvar:%d, vvar:%d\n", nvar, rvar, vvar);
} return ;
}
1. When we compile the program with
gcc -o volatile_setjmp volatile_setjmp.c
and the output :
Inside do_jump(): nvar:777, rvar:888, vvar:999
After do_jump(): nvar:777, rvar:888, vvar:999
2.However, when we compile with optimization
gcc -O -o volatile_setjmp volatile_setjmp.
we get the following unexpected results:
Inside do_jump(): nvar:777, rvar:888, vvar:999
After do_jump(): nvar:111, rvar:222, vvar:999
We can prevent such code reorganization by declaring variables as volatile,which tells the optimizer not to optimizethem. In the preceding program output,we see that the variable vvar, which was declared volatile, was correctly handled,even when we compiled with optimization.
longjmp setjmp and volatile的更多相关文章
- C++异常实现与longjmp, setjmp,栈指针EBP, Active Record
这篇讲的不错: http://blog.csdn.net/smstong/article/details/50728022 首先Active Record 然后EBP,ESP等指针 2 通过setjm ...
- apue学习笔记(第七章 进程环境)
本章将了解进程的环境. main函数 C程序总是从main函数开始执行,main函数的原型是: int main(int argc,char *argv[]); 其中,argc是命令行参数的数目,ar ...
- 用arm-linux-gcc v4.3.4交叉编译Qt4.8.3
1.解压缩 #tar zxvf qt-everywhere-opensource-src-4.8.3.tar.gz 2. configure #mkdir buildarm-static #cd b ...
- C高级 跨平台协程库
1.0 协程库引言 协程对于上层语言还是比较常见的. 例如C# 中 yield retrun, lua 中 coroutine.yield 等来构建同步并发的程序. 本文就是探讨如何从底层实现开发级别 ...
- 鸿蒙内核源码分析(汇编汇总篇) | 所有的汇编代码都在这里 | 百篇博客分析OpenHarmony源码 | v40.03
百篇博客系列篇.本篇为: v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...
- Android Jni 调用
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:j ...
- setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
目录 . 应用场景 . Use Case Code Analysis . 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer Over ...
- 【转】浅析C语言的非局部跳转:setjmp和longjmp
转自 http://www.cnblogs.com/lienhua34/archive/2012/04/22/2464859.html C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转 ...
- 进程环境之setjmp和longjmp函数
在C中,goto语句是不能跨越函数的,而执行这样跳转功能的是函数setjmp和longjmp.这两个函数对于处理发生在深层嵌套函数调用中的出错情况是非常有用的. setjmp和longjmp函数也称为 ...
随机推荐
- Jmeter - 源码开发环境配置
step1: 创建一个JavaProject , 我们命名为 JmeterSrcDev,点击Next.
- bootstrap-table填坑之旅<一>认识bootstrap-table
应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...
- web前端学习(二) javascript对象和原型继承
目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...
- 解决redhat 没注册的情况下yum无法使用的问题
官网下载的rhel,安装后是没有配置yum源的,需要自己配置yum源.网络上的很难找到rhel的yum源,但是在ISO镜像里面有很多redhat提供的软件包,也是正版软件,我们可以把这个拷贝出来 ...
- 使用JavaMail实现发送邮件功能
package com.dunn.model; import java.util.Properties; import javax.mail.Address; import javax.mail.Me ...
- pyhon——进程线程、与协程基础概述
一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...
- C#编码规范 转 http://www.cnblogs.com/wulinfeng/archive/2012/08/31/2664720.html
C#编码规范 1 规范目的 ……………………………………………………… 3 2 适用范围 ……………………………………………………… 3 3 代码注释 ………………………………………………… ...
- linux head、tail、sed、cut、grep、find
head用法: head 参数 文件名 -cn:显示前n个字节 -n:显示前n行 例子:head -c20 1.txt 显示1.txt文件中前20个字符 ls | head -20:显示前20 ...
- EasyUI combobox 下拉高度自适应
要指出的是,combobox是继承自combo的,所以,combo的属性也可以被combobox使用,该问题也是这样产生的,知道这个原理,该问题就解决一半了,另一点要指出的是,在easyui中,num ...
- Dynamo分布式系统——「RWN」协议解决多备份数据如何读写来保证数据一致性,而「向量时钟」来保证当读取到多个备份数据的时候,如何判断哪些数据是最新的这种情况
转自:http://blog.jqian.net/post/dynamo.html Dynamo是Amazon开发的一款高可用的分布式KV系统,已经在Amazon商店的后端存储有很成熟的应用.它的特点 ...