读书笔记---c专家编程(第六章)

来源:互联网 发布:薪酬优化 劳务外包 编辑:程序博客网 时间:2024/04/28 13:15

1.在unix中,段(segments)表示一个二进制文件相关的内容块,section是ELF文件中的最小组织单位,一个段一般含有几个section。

2.size+可执行文件:查看文件的各个段(文本段,数据段,bss段)

3.bss段与数据段的区别在于前者为未初始化的全局或者静态变量,后者为已初始化的。

4.文本段:字符串常量,可执行代码(在main函数中的):char a【100】 = “123”;和const a【100】 = “123”;表示字符串常量,存在test中。

5.链接器:把指令直接从文件拷贝到内存中(一般用mmap()系统调用)。

6.映射:虚拟地址==》物理地址。

7. 堆栈段:在程序运行时,系统维护一个指针(常位于寄存器中),通常为sp,用于提示堆栈当前的顶部位子。一个是fp指针,它的值是最靠近堆栈顶部的过程活动记录的地址。

堆栈中的过程活动记录:当每个函数被调用时,都会产生一个过程活动记录,它是一种数据结构,用于支持过程调用,并记录调用结束以后返回调用点所需要的全部信息。/usr/include/sys/farame.h  中描述了活动记录的结构

8。函数调用时参数压栈的顺序从右向左,而函数的嵌套或者递归调用时,后一个调用的函数都会显示在堆栈的下面。单个或者多个函数调用都在堆栈段所开辟的内存中进行。

9。注意:不能从函数中返回一个指向该函数局部变量的指针(悬垂指针),因为函数结束后,局部变量被回收了。

10.所谓的多线程就是为每个线程分配不同的堆栈。

11.段错误与页错误:访问了不该访问的地址。(硬件中断)


0 0
原创粉丝点击