【回眸】技术干货——程序存储空间布局-内存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系统图解

Ro意思是 read Only

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

堆和栈的区别

①申请方式:

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

②申请后的系统响应

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

③申请内存的大小限制

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

④申请效率

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

⑤存储内容

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

⑥分配方式

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

后记碎碎念

看到这里的读者朋友们可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位应届生往届生,该博文最初发表在CSDN上。

#实习生如何通过转正##Tplink求职进展汇总##tplink提前批进度交流##安克创新求职进展汇总##面试被问“你的缺点是什么?”怎么答#
应届生必学实用物联网技术 文章被收录于专栏

本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务