Glibc内存管理-Linux的内存布局

32位模式下的经典布局:

Glibc内存管理-Linux的内存布局

 32位模式下的默认布局:

Glibc内存管理-Linux的内存布局

64位的内存布局:

Glibc内存管理-Linux的内存布局

 

 

 

 

 

 

 

 

 

 

主要段说明:

  • Knernel space 指内核空间。
  • BSS段主要存储未初始化的全局变量或者初始化为0的全局变量静态变量的一块内存区域。(可读可写)
  • BSS段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户应该将它定义在可读写的RAM区内,源程序中使用malloc分配的内存就是这一块,它不是根据data大小确定,主要由程序中同时分配内存最大值所确定,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。
  • data段包含静态初始化的数据,所以有初值的全局变量和static变量在data区。(可读可写)
  • text段是程序代码段(只读)。

其它说明:

  • bss 段与堆栈之间的空间是空闲的,空闲空间被分成两部分,一部分为 heap,一部分为 mmap 映射区域。
  • Heap 和 mmap 区域都可以供用户*使用,但是它在刚开始的时候并没有映射到内存空间内,是不可访问的。
  • 在向内核请求分配该空间之前,对这个空间的访问会导致segmentation fault。
  • Stack区域是唯一不需要映射,用户却可以访问的内存区域。
  • 进程的栈和 mmap 映射区域并不是从一个固定地址开始,并且每次启动时的值都不一样,这是程序在启动时随机改变这些值的设置。