Linux 进程内存布局
Linux 进程内存布局
内存布局图示

内存区域解释
1. 内核空间 (Kernel Space)
最高地址处为内核空间。这部分内存是为操作系统内核保留的,用户态的程序无法直接访问,以保证系统的安全和稳定
2. 栈 (Stack)
栈从高地址向低地址增长,用于存储局部变量、函数调用信息和返回地址等。每次函数调用时,都会在栈中分配空间,调用结束时释放空间
- 栈从高地址向低地址增长,因此通常在图中箭头向下表示
3. 未映射内存区域
在栈和堆之间有一段未使用的内存区域,作为保护区,避免栈和堆相互干扰。这部分内存用于动态内存分配的缓冲区,防止栈溢出和堆冲突
4. 动态链接库 (Dynamically Linked Libraries)
动态链接库会在程序运行时加载到堆区域之上。它们提供了程序运行时所需的共享库功能
5. 堆 (Heap)
堆从低地址向高地址增长,用于动态分配内存,如程序运行时使用 malloc 或 new 分配的内存。程序结束后,这部分内存需要手动释放
6. BSS段
BSS段用于存储未初始化的全局或静态变量。这些变量在程序开始运行时会被初始化为0,占据虚拟内存但没有实际存储在可执行文件中
7. 数据段 (Data Segment)
数据段用于存储已初始化的全局和静态变量。与BSS不同,这部分数据在程序编译时就已存储在可执行文件中,并在程序加载时被加载到内存中
8. 代码段 (Text Segment)
代码段用于存储程序的可执行代码,即指令。这个区域通常是只读的,防止程序意外或恶意修改指令
9. 未使用空间
最底部是未使用的内存区域
区域1
包括从“栈 (Stack)”到“动态链接库 (Dynamically Linked Libraries) 和堆 (Heap)”之间的内存区域。这部分内存属于用户态可用的动态数据区域,用于程序在运行时动态分配和管理的内存
区域2
包括从“BSS段”到“代码段 (Text Segment)”之间的内存区域。它包含了BSS段、数据段和代码段。这部分内存主要用于存储程序的静态数据和指令,是程序在编译和加载时就已确定的区域,属于只读或只写数据区域