Linux——虚拟内存空间分布
2021/12/31 7:07:54
本文主要是介绍Linux——虚拟内存空间分布,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux——虚拟内存空间分布
- 虚拟地址空间分布图
- 用户空间内存空间分布描述
虚拟地址空间分布图
用户空间内存空间分布描述
系统内的程序分为程序段和数据段,具体又可细分为一下几个部分:
-
text段-代码段
text段存放程序代码,运行前就已经确定(编译时确定),通常为只读,可以直接在ROM或Flash中执行,无需加载到RAM。 -
rodata段(read-only-data)-常量区
rodata段存储常量数据,比如程序中定义为const的全局变量,#define定义的常量,以及诸如“Hello World”的字符串常量。只读数据,存储在ROM中。注意:
(1)有些立即数与指令编译在一起,放在text段。
(2)const修饰的全局变量在常量区;const修饰的局部变量只是为了防止修改,没有放入常量区。
(3)编译器会去掉重复的字符串常量,程序的每个字符串常量只有一份。
(4)有些系统中rodata段是多个进程共享的,目的是为了提高空间利用率。 -
data段-数据段
data存储已经初始化的全局变量,属于静态内存分配。注意:
(1)初始化为0的全局变量还是被保存在BSS段)
(2)static声明的变量也存储在数据段。
(3)链接时初值加入执行文件;执行时,因为这些变量的值是可以被改变的,所以执行时期必须将其从ROM或Flash搬移到RAM。总之,data段会被加入ROM,但却要寻址到RAM的地址。 -
bss段
bss段存储没有初值的全局变量或默认为0的全局变量,属于静态内存分配。
bss段不占据执行文件空间(无需加入程序之中,只要链接时将其寻址到RAM即可),但占据程序运行时的内存空间。
执行期间必须将bss段内容全部设为0。 -
stack段-栈
stack段存储参数变量和局部变量,由系统进行申请和释放,属于静态内存分配。
stack的特点是先进先出,可用于保存/恢复调用现场。 -
heap-堆
heap段是程序运行过程中被动态分配的内存段,由用户申请和释放(例如malloc和free)。
申请时至少分配虚存,当真正存储数据时才分配物理内存;释放时也不是立即释放物理内存,而是可能被重复利用。
参考
https://blog.csdn.net/weixin_29957761/article/details/116585473
https://www.cnblogs.com/annie-fun/p/6633531.html?utm_source=itdadao&utm_medium=referral
这篇关于Linux——虚拟内存空间分布的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法