进程的基本环境
1、main主函数原型
int main( int argc, char *argv[]);
在exec函数执行main函数前,先调用一个特殊的启动例程,改启动例程为程序的起始地址,
目的是为了从内核获取进程的命令行参数和环境变量
2、进程的终止
终止进程的方法有好多种,常用的有
(1)从main返回
return 其实是调用exit函数。
exit函数执行标准I/O库的清理关闭工作,fclose所有已打开的流,flush已修改数据。
(2)abort
(3)调用exit函数
(4)接收到信号
...
3、命令行参数
argc为命令行参数的个数,argv为命令行数组。数组大小为argc+1,最后一个值为NULL
4、环境表
全局变量environ指向环境表的起始地址,环境表是一个字符串数组,数组中存放的是name=value形式的C 字符串
5、C程序的存储空间布局
正文段是可以共享的,是只读的,防止被修改。bss段是不存储在磁盘程序文件中的,因为该段的变量都会被exec函数初始化为0或null,
正文段和初始化的数据会被存放在磁盘程序文件中。
命令行参数和环境变量存储在最高的地址空间内,对他们的修改相当麻烦,因为空间有限。有时需要重新申请空间,或者复制空间。
6、共享库
共享库其实是已被编译的中间文件,二进制形式。共享库使得可执行文件中不在需要包含公用的函数,只需引用共享库的函数即可。
调用动态库的好处在于可以减少可执行文件的大小,更新库不用修改源程序,坏处在于增加了运行时间开销,在当程序第一次被执行或者第一次调用共享库时。
-static参数指定调用静态库,不加则调用动态共享库
size 命令查看程序各个字段的大小
时间: 2024-10-04 20:11:07