UNIX环境高级编程--第七章进程环境总结

来源:互联网 发布:深圳少儿编程培训机构 编辑:程序博客网 时间:2024/05/16 06:07

1.C程序总是从main函数开使执行的----当内核执行C程序时,在调用main函数前先调用一个特殊的启动例程.可执行文件将此例程指定为程序的起始地址,--这是有连接编辑器设置的,而连接编辑器则由C编译器(通常是cc)调用. -------启动例程从内核取得命令行参数和环境变量值,然后为调用main函数作好准备.

2.当执行一个程序时,调用exec的进程可将命令行参数传递给该新程序.

3.每个程序都会接收到一张环境表,与参数表一样,环境表也是一个字符指针数组.

4.C程序的组成部分:

正文段:CPU执行的机器指令部分,只读的.

初始化数据段:包含了程序中需明确的赋值的变量.

非初始化数据段(bss段--block started by symbol):在程序执行前,内核将此段中的数据初始化为0或空指针.

栈:自动变量以及每次调用函数时所保存的信息都存放在此段中,每次调用函数时,其返回地址以及调用者的环境信息(如某些寄存器的值)都存放在栈中.然后最進被调用的函数在栈上为其自动和临时变量分配存储空间.递归函数每次调用自身时,就使用一个新的栈桢,因此一个函数调用实例中的变量集不会影响另一个函数调用实例中的变量.

堆:通常在堆中进行动态存储分配.-----堆顶和栈底之间未用的虚地址空间很大.

5.共享库使得可执行文件中不再需要包含公用的库例程,而只需在所有进程都可引用的存储区中維护这种库例程的一个副本.程序第一次执行或者第一次调用某个库函数时,用动态链接的方法将程序的与共享库函数相链接.这减少了每个可执行文件的长度,但增加了一些运行时间开销.这种开销发生在该程序第一次被执行时或者每个共享库函数第一次被调用時.

6.如若一个进程调用malloc函数,但却忘记调用free函数,那么该进程占用的存储区就会连续增加,这被称为泄漏.

7.内存管理至命错误:(1)释放一个已释放的块.(2)掉用free时所用的指针不是三alloc函数的返回值.

8.如果存在:#define    doit(name)    pr_limits(#name, name);

    则doit(RLIMIT_CORE);它将由C预处理程序扩展为: pr_limit("RLIMIT_CORE", RLIMIT_CORE);-------(#)为字符串创建符

原创粉丝点击