【回眸】程序存储空间布局-内存4区模型(嵌入式软件面试重点)

程序存储空间布局-内存4区模型(嵌入式软件工程师面试重点)

代码段:.Text

存放代码,二进制代码

静态全局区:初始化数据段(.Data)未初始化数(.BSS)

初始化非0的静态变量和全局变量放在.Data
初始化为0或未初始化的静态变量和全局变量放在.BSS

只读数据段/文字常量区/正文段(RoData)

常量、文字放在RoData,比如 666 Hello World

Stack:先进后出

特点:小
自动分配自动释放
函数里的,除了static 修饰的,变量全都在Stack里面
First In Last Out (先进后出)

Heap: malloc 给用户自定义的空间,需要申请,需要释放

空间足够大
超大数据放在堆空间
堆位于非初始化数据段和栈之间

32位Linux系统图解

【回眸】程序存储空间布局-内存4区模型(嵌入式软件面试重点)_第1张图片

Ro意思是 read Only
【回眸】程序存储空间布局-内存4区模型(嵌入式软件面试重点)_第2张图片

a.out中还有若干其他类型的段,例如,包含符号表的段、包含调试信息的段以及包含动态共享库谜接表的段等等。这些部分并不装裁到进程执行的程序映像中。

堆和栈的区别

①申请方式:

Stack(栈): 由编译器自带分配释放,存放函数的参数值,局部变量等。
Heap(堆):程序员申请,并指名大小–>malloc 函数。

②申请后的系统响应

Stack(栈):只要栈剩余空间>所申请空间,都会提供。
Heap(堆):操作系统有记录空闲内存的链表:收到申请->遍历链表->寻找->申请空间的堆结点

③申请内存的大小限制

Stack(栈):向低地址扩展的数据结果,连续内存区域,栈 获得的空间较小。
Heap(堆):向高地址扩展的,不连续内存区域;链表遍历方向为(低地址->高地址)。
栈获得空间灵活,空间也大。

④申请效率

Stack(栈):系统自由分配,速度快。
Heap(堆):速度慢,容易产生内存碎片。

⑤存储内容

Stack(栈):第一进栈 :主函数中的下一条指令的地址 -->函数的各个参数,参数由右往左
进栈。–>函数的局部变量(静态变量不入栈)。调用结束后,顺序相反,局部变量先出栈。
Heap(堆): 程序员自己安排

⑥分配方式

Stack(栈):栈 有两种分配方式,静态分配和动态分配。静态分配是编译器完成的,比如局
部变量的分配,动态分配由 malloc 函数进行分配,但栈的动态分配和堆是不同的,栈的动态
内存由编译器进行释放,无需手工实现。
Heap(堆):堆都是动态分配的,没有静态分配的堆。

你可能感兴趣的:(Linux学习笔记,面试,职场和发展,c语言,嵌入式,linux)