Linux进程内存布局
目录
一.内存布局图
二.内核空间和用户空间
虚拟地址的范围是0-4G,内存将这块区域分成两部分,1G的内核空间,供内核使用,3G的用户空间,供用户使用。用户无法直接访问内存态的虚拟空间,只能通过系统调用进入内核空间。
三.用户空间内存布局
1.栈
用户空间中最顶部的段叫做栈。它被用于存放函数参数和动态局部变量。调用一个方法或函数会将一个新的栈帧压入到栈中,栈帧会在函数返回时被清理掉。进程中的每一个线程都有属于自己的栈。
2.堆
堆和栈一样都是为进程运行提供动态的内存分配。但是堆又不同于栈,堆上内存的生命周期和执行分配函数的生命周期不一致,堆上分配的内存只有对应进程通过调用系统主动释放或进程结束后才会释放。所以,内存泄漏由此产生。
3.BBS段和Data段
都是静态内存区域,用来存储静态局部变量或静态全局变量,其在编译器阶段便决定了虚拟内存的消耗。
区别:Data段存放的是已经初始化的变量,映射自程序镜像中包含对应静态变量的文件;BSS段存放的是未初始化的变量,不映射任何一个执行文件。
这段中有程序的指令代码。代码段通过只读方式加载到内存中,它在多个进程中可以被安全共享。