APUE 学习笔记(五) 进程环境
1.main函数
2.进程终止
3.C程序的存储空间布局

4. setjmp longjmp
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h> static jmp_buf jmpbuf;
static int globval = ; static void func2(void)
{
longjmp(jmpbuf, );
} static void func1(int i, int j, int k, int l)
{
fprintf(stdout, "in func1:\n");
fprintf(stdout, "globval = %d,"
"autoval = %d,"
"regival = %d,"
"volaval = %d,"
"statval = %d\n", globval, i, j, k , l);
func2();
}
int main(int argc, char* argv[])
{
int autoval = ;
register int regival = ;
volatile int volaval = ;
static int statval = ;
if (setjmp(jmpbuf) != ) {
fprintf(stdout, "after longjmp:\n");
fprintf(stdout, "globval = %d,"
"autoval = %d,"
"regival = %d,"
"volaval = %d,"
"statval = %d\n",
globval, autoval, regival, volaval, statval);
exit();
} globval = ;
autoval = ;
regival = ;
volaval = ;
statval = ; func1(autoval, regival, volaval, statval);
exit();
}
编译时不进行优化,结果如下:
in func1:
globval = ,autoval = ,regival = ,volaval = ,statval =
after longjmp:
globval = ,autoval = ,regival = ,volaval = ,statval =
编译时进行全部优化,结果如下:
in func1:
globval = ,autoval = ,regival = ,volaval = ,statval =
after longjmp:
globval = ,autoval = ,regival = ,volaval = ,statval =
我们可以看到:全局、静态、易失变量不受优化的影响,在调用longjmp之后,他们的值是最近所呈现的值
未优化时,所有5个变量都存放在存储器中,而进行优化之后,autoval 和 regival 都存放在寄存器中,而 volatile变量仍存放在 存储器中
对于 volatile 修饰符用法,这里有一篇很好的文章:http://hedengcheng.com/?p=725
APUE 学习笔记(五) 进程环境的更多相关文章
- Linux System Programming 学习笔记(五) 进程管理
1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件) A process is a running program A thread is the unit of activity in ...
- APUE 学习笔记(六) 进程控制
1. fork 创建新进程 fork创建的新进程称为子进程,fork函数调用一次,返回两次. 两次返回的唯一区别就是子进程的返回值是0,而父进程的返回值是新子进程的进程ID 在fork之后是父进程先执 ...
- APUE学习笔记3_文件IO
APUE学习笔记3_文件IO Unix中的文件IO函数主要包括以下几个:open().read().write().lseek().close()等.这类I/O函数也被称为不带缓冲的I/O,标准I/O ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
- Linux学习笔记(五) 账号管理
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...
随机推荐
- 小试牛刀,建立jsp网页与导出war包
一.建立jsp网页 首先创建一个动态项目(我们学习的是动态网) 二.检查编码utf-8有没错误. 如有错误就是没有设置eclipse,请按照eclipse设置 编写一段代码,进行了解 三.导出一个wa ...
- OC和C++的混用1
//Objective-C类 /*在混用之前需要做一步非常重要的事:不是代码而是编译器选项,在做混合编译之前一定要把编译器的Compile Sources As选项改为Objective C++. 修 ...
- 【二分 最小割】cf808F. Card Game
Digital collectible card games have become very popular recently. So Vova decided to try one of thes ...
- Golang 简单静态web服务器
直接使用 net.http 包,非常方便 // staticWeb package main import ( "fmt" "net/http" "s ...
- 【Python学习之六】高阶函数1(map、reduce、filter、sorted)
1.map map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回.示例: >>> def ...
- 事务控制语言DTL
一.什么是事务? · 数据库中的事务,是指可以将“多条相关语句执行”看做是“一条语句执行”的一种内部机制.即事务是一种可以保证“多条语句一次性执行完成”或者一条语句都不执行的机制. 三.事务的特点 原 ...
- 【linux】【进程】stand alone 与 super daemon 区别
本文引用自 鸟哥的linux私房菜如果依据 daemon 的启动与管理方式来区分,基本上,可以将 daemon 分为可独立启动的 stand alone , 与透过一支 super daemon 来 ...
- nrf开发笔记一开发软件
nrf52810 的开发环境,比较主流的可以使用keil,iar亦可.sdk中,使用的是pca10040e,s112.虽然开发板共用一个型号(pca10040) keil5中,cmsis 需要4.5. ...
- 【Netty】NIO框架Netty入门
Netty介绍 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...
- webpack 环境搭建+实现热更新
让我们一起构建一个小的app 为了便于你更好的了解Webpack带来的好处,我们将会构建一个非常小的app并将资源文件打包.在这个教程中我推荐基于Node4或Node5和NPM3来进行开发,这样就避免 ...