unix环境高级编程笔记

unix进程的环境

当内核启动一个c程序时,在main函数之前会先调用启动例程,由启动例程做一些处理工作然后才调用main函数,该启动例程至少要设置命令行参数和环境变量。
unix进程退出的5种方式:

  1. 在main函数中return。
  2. 调用exit函数,一般在main函数返回后也会调用exit函数。
  3. 调用_exit函数。
  4. 调用abort。
  5. 由一个信号终止。情况4是本情况的特殊情况。

exit和_exit函数的区别
exit位于头文件:
_exit位于头文件: 是一个系统调用函数,用于处理unix特定细节。
_exit直接进入内核,而exit函数首先执行终止处理程序并关闭所有标准io流(调用fclose函数刷新缓冲区),然后进入内核(一般会调用_exit函数)。

function: void atexit(void (*func)(void));
位于头文件:
ANSI C规定一个进程可登记多达32个终止处理程序,由exit函数调用,并以注册相反顺序调用。

c程序的存储空间布局
系统为每个进程分配了虚拟进程空间,存储空间布局建立在该虚拟进程空间中。虚拟进程空间映射到物理内存空间是由操作系统完成,相关概念有分页机制,分段机制,页交换机制等等,此处暂且略过。
由低地址到高地址,一般按照以下顺序来分配:
正文段:执行的机器指令部分,只读,可共享。
初始化数据段
非初始化数据段:也称为bss段,由exec置0,并不需要被放在磁盘文件中。

堆内存分配:
void* malloc(size_t size);
分配指定字节数的动态内存,内容未指定。
void* calloc(size_t obj, size_t size);
为指定长度的对象,分配能容纳指定个数的存储空间,每一位被置0。
void realloc(void ptr, size_t new_size);
更改已分配的存储区大小,可能会将以前的内容移动到更大的存储区,新增的区域内容未确定。
若出错则返回nullptr指针。这三个函数返回的指针一定是适当内存对其的,满足最严苛的对齐要求。
void free(void* ptr);

命令行参数和环境变量:

你可能感兴趣的:(unix)