进程的运行环境总结

57 篇文章 1 订阅

#进程的运行环境总结

####开始运行

先说一下进程的运行环境,我们一个进程首先是从main函数开始运行的,有点像单片机的时候也是从main函数开始跑的

####进程终止

进程终止的5种形式 :

main函数返回

调用exit

调用_exit或者_Exit

最后一个线程返回

最后一个线程调用了pthread_exit

说起exit函数我们应该注意一个十分重要的知识点 那个知识点就是exit到底做了什么

根据unix网络编程的记载


exit执行后有两步操作 第一部是关闭所有的io描述符,第二步是释放内存 然后才结束进程,在unix 4.8节最后    的例子中,书中说过exit进程终止处理的部分工作就说关闭所有已经打开的描述符.

atexit可以用来注册终止处理程序,一个进程可以注册32个处理函数,exit函数是后注册先触发的队列顺序

####运行环境

每一个进程都有一张环境表,全局变量environ为环境指针,指针数组是环境表
环境指针            环境表
environ-----------》HOme,PATH,SHELL,USER,LOGNAME


####共享库

这个就要从makefile的静态库和动态库说起了,.a是静态库,他是直接跟程序编译在一起的,所以会导致二进制文件比较大.a文件,

如果是动态库那么就是.so文件,他不是直接静态编译进去的,是在程序进行调用的时候才会跟程序进行连接,所以他会导致程序运行慢一些,但是无疑会让程序变得小一些,而且替换库的时候不需要重新进行编译和连接

####c程序的存储空间布局

一个c的程序,我们要知道他从高地址到低地址依次是参数和环境变量----》堆栈区------》数据区(初始化的数据区和未初始化的数据区)------》正文段

#### 存储分配

4个函数要知道

malloc 动态在堆上分配一块连续内存

relloc 对malloc申请的内存进行重新的分配

alloc在栈上申请一块内存

calloc 在堆上动态申请一块内存并且将其初始化为0

####setjump和longjump

我们知道goto 的话只能在函数内使用无法超越函数这个范畴这时候我们可以引入setjump.h这个头文件使用setjump设置一个buffer,然后longjump,设置setjump的返回值进行跳转就可以了。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值