进程的虚拟内存空间
#C
2024-08-31
操作系统给每个进程营造一种假象,即独占整个内存。在 x86 系统中,为每个进程虚拟出 4G 的内存空间,其中 3G 为用户空间,这块空间各进程相互独立;1G 为内核空间,这块空间进程间共享。
进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存。虽然每个进程的地址空间都包含了内核空间,但这些内核空间,其实关联的都是相同的物理内存。这样,进程切换到内核态后,就可以很方便地访问内核空间内存。
代码段:用来存放程序执行代码,也可能包含一些只读的常量。这块区域的大小在程序运行时就已经确定,并且为了防止代码和常量遭到修改,代码段被设置为只读
数据段:用来存放程序中已初始化全局变量与静态变量
BSS段:用来存放程序中未初始化全局变量与静态变量
堆区:动态内存分配区域,用来存放动态分配的内存,堆内存由用户申请分配和释放,从低地址向高地址增长
文件映射段:也叫共享区,主要包括共享内存、动态链接库等共享资源,从低地址向高地址增长
栈区:存放程序中临时创建的局部变量,如函数的参数、内部变量等
参考文章地址:进程的虚拟内存布局是怎样的?