软件开发--深刻理解程序的结构

程序由不一样的段构成(代码段,数据段)
1.程序的静态特征就是指令和数据
2.程序的动态特征就是执行指令处理数据编程

A.段
传统上,一个程序通常会有这几个段:.text 、.data、.bss段
a.若是处理器由内存管理单元,那么可执行程序被加载到内存之后,一般会将.text段所在的内存空间设置为只读,以保护.text中的代码不会由于程序出错而被意外改写
b.处理器所需加工的数据是放在.data、.bss、.rdata段并发

代码示例
1.状况一
软件开发--深刻理解程序的结构软件开发--深刻理解程序的结构软件开发--深刻理解程序的结构
运行的结果图进行对比,能够看到的是.data和.bss段的大小有了变化,这是由于在第二个实验中增长了两个变量。对于初始化不为0 的变量,编译器会将它放入.data段中,而对于初始化为0的变化量会被放入.bss段中ide

软件开发--深刻理解程序的结构

二.栈
栈的做用:
1.当中断发生时用于保存处理器寄存器的值,以便中断返回时经过退栈回到被中断点继续程序的运行
2.用做函数参数和局部变量的存储空间。正由于栈还能够用于存放局部变量,因此栈指针的变化并不仅是经过退栈才能够改变
3.函数调用时,栈用于保存函数的活动记录(栈帧信息),并发编程时,每个线程拥有独立的栈
SP寄存器做为栈顶"指针"实现入栈操做和出栈操做
软件开发--深刻理解程序的结构
三.程序中的堆
1.堆是一片"闲置"的内存空间,用于提供动态内存分配
2.堆空间的分配须要函数支持
3.堆空间在使用结束后须要归还函数

四.小结
1.程序中的内容是经过段进行分类管理的。在传统的三个段中,.text段用于存放处理器指令,.data段用于存放初始化的全局和静态变量,.bss段则用于存放初始化为0和未初始化的全局和静态变量。一个程序无论有多少个段,各段都属于程序,数据和调试信息三大类的一种。
2.栈为函数参数和局部变量提供存储空间。局部变量所占用的内存空间是由编译器生成的指令自动分配与释放的,所以不存在像堆那样的内存泄漏问题。在多任务环境中,因为各任务的函数调用路径能够不一样,因此每个任务都有属于本身的栈空间
3.堆中的内存在没有分配出来以前,是整个系统所共享的。要从堆中获取内存,必须经过函数调用来实现。若是从堆中所分配得到的内存不在须要使用了,则必须调用相应的函数进行释放,不然会产生内存泄漏线程

相关文章
相关标签/搜索