-
内存
a. 代码段又叫正文段。这部分存放的是进程的执行代码,是进程中所有线程所共享的,并且是只读的。常量也放在代码段里。
b. 初始化数据段。又叫数据段,存放程序代码里初始化时赋值过的变量。
c. 未初始化数据段。又叫bss段,存放程序代码里初始化时未赋值过的变量。
d. 栈。存放函数调用时申请的临时变量,在函数返回时释放。
e. 堆。存放动态申请的变量,调用free()释放 或 进程结束时释放。 -
环境变量
a. 每个进程都有一个环境变量表,这是一个指针数组。
b. extern char **environ 变量指向这个指针数组的首地址。
c. 环境变量表的存储格式为
{“name=value”,“name=value”,…,NULL}
d. 环境变量的操作函数如下:
//获取环境变量表中name对应的value
char *getenv(const char *name);
成功:返回指向 value 的指针;失败:返回 NULL
//设置环境变量到环境变量表中,若name已存在,则删除后在设置
int putenv(char *str); //str = {"name=value"};
成功:返回 0;失败:返回非 0
//设置环境变量到环境变量表中,若name已存在,则看rewrite参数
//1. 若rewrite非0,则可以修改name对应的value
//2. 若rewrite是0,则不能修改name对应的value,但不算出错
int setenv(const char *name, const char *value, int rewrite);
成功:返回 0;失败:返回 -1
//删除环境变量
int unsetenv(const char *name);
成功:返回 0;失败:返回 -1
- 共享库(动态库)与静态库
共享库编译命令:
gcc -fPIC -c *.c -o *.o
gcc -share -o libname.so *.o //name 就是共享库的名字
静态库编译命令:
gcc -c *.c -o *.o
ar -r libname.a *.o //name 就是静态库的名字
- 进程资源
每个进程都有一组资源限制,其中一些可以通过下列函数查看和修改。
int getrlimit(int resource, struct rlimit *rlptr);
int setrlimit(int resource, const struct rlimit *rlptr);
成功:返回 0; 失败: 返回非0
- 进程退出操作
a. 进程正常的退出时通过 return 或 调用 exit()。
b. 在(a)之后会通过系统调用接口调用内核中的函数_exit()或_Exit()。
c. 在(a)和(b)之间,进程允许执行一些用户定义的函数。
b. 调用atexit()函数可以完成(c)操作。
int atexit(void (*func)(void));
成功:返回0;失败:返回非 0