进程的虚拟内存空间

进程的虚拟内存地址空间.png

操作系统给每个进程营造一种假象,即独占整个内存。在 x86 系统中,为每个进程虚拟出 4G 的内存空间,其中 3G 为用户空间,这块空间各进程相互独立;1G 为内核空间,这块空间进程间共享。

进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存。虽然每个进程的地址空间都包含了内核空间,但这些内核空间,其实关联的都是相同的物理内存。这样,进程切换到内核态后,就可以很方便地访问内核空间内存。

进程的虚拟地址空间2.png

代码段:用来存放程序执行代码,也可能包含一些只读的常量。这块区域的大小在程序运行时就已经确定,并且为了防止代码和常量遭到修改,代码段被设置为只读

数据段:用来存放程序中已初始化全局变量与静态变量

BSS段:用来存放程序中未初始化全局变量与静态变量

堆区:动态内存分配区域,用来存放动态分配的内存,堆内存由用户申请分配和释放,从低地址向高地址增长

文件映射段:也叫共享区,主要包括共享内存、动态链接库等共享资源,从低地址向高地址增长

栈区:存放程序中临时创建的局部变量,如函数的参数、内部变量等


参考文章地址:进程的虚拟内存布局是怎样的?