APUE读书笔记——第七章 进程环境

1.    main函数:int main(int argc, char* argv[]),调用main函数前系统先调用一个特殊的启动例程,它从内核取得命令行参数和环境变量值,为调用main函数做好安排。
2.    进程终止方式8种,5种正常终止:
a)    main 函数return
b)    调用exit
c)    调用_exit或_Exit
d)    最后一个线程从其启动例程返回
e)    最后一个线程调用pthread_exit
异常终止3种方式
a)    调用abort
b)    接到信号并终止
c)    最后一个线程对取消请求做出响应

3.    _exit和_Exit会立即进入内核,exit先执行一些清理处理(包括调用执行各终止处理程序(由atexit或on_exit注册,先登记后调用(栈式规则)),关闭所有标准I/O流等),然后进入内核。
4.    由atexit或on_exit注册的函数,在exit或return退出时,都会执行。
5.    环境表指针:extern char **environ,多个字符串,形如”HOME=/home/sar\0”
6.    C程序存储空间从低地址到高地址为
a)    正文段
b)    初始化数据段
c)    BSS段(block started by symbol)
d)    堆
e)    栈
7.    size命令查看程序文件text、data、bss段大小
8.    动态库的优点:减小可执行文件的大小,缺点是增加第一次调用共享库函数时的时间开销;另一个优点是动态库升级之后,可以不必重新连接编辑(只要API不变)
9.    内存分配:堆上动态分配内存时,多数的实现中,所分配的存储空间比要求的要大一些,位于该块的前端,保存管理信息,这就意味着这些内存一旦被越界误写,会造成灾难性后果。
10.    Malloc\calloc\realloc\free: 
a)    malloc不清零、calloc会清零,
b)    free只能处理前三个函数返回的指针,不能重复free
c)    realloc可以动态改变申请内存大小。
11.    alloca:类似malloc的使用方法,但是分配的空间在栈帧,所以会自动释放。
12.    获取环境变量:char *getenv(const char *name);
13.    Linux支持对环境变量相关的API: getenv、putenv、setenv、unsetenv、clearenv
14.    跨越函数的跳转:setjump和longjump
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值