LINUX内存空间布局

本文详细阐述了32位和64位Linux体系结构下虚拟内存空间的布局,包括用户空间内存分区(如代码段、数据段、BSS段、堆、文件映射和栈)以及内核空间内存分区。特别强调了不同地址区域的权限和用途,如不可访问的保留区和堆的动态内存分配。
摘要由CSDN通过智能技术生成

参考博文地址:Linux内存管理1——虚拟内存空间-CSDN博客

  • 64位体系结构 Linux 的整个虚拟内存空间的布局:

在 64 位体系下的内核虚拟内存空间与物理内存的映射就变得非常简单,由于虚拟内存空间足够的大,即便是内核要访问全部的物理内存,直接映射就可以了,不在需要用到《7.1.2 ZONE_HIGHMEM 高端内存》小节中介绍的高端内存那种动态映射方式。

  • 32 位体系结构 Linux 的整个虚拟内存空间的布局:

1.用户空间内存分区:

  1. 不可访问的保留区: 0x0000 0000 到 0x0804 8000 这段虚拟内存地址是一段不可访问的保留区,因为在大多数操作系统中,数值比较小的地址通常被认为不是一个合法的地址,这块小地址是不允许访问的。比如在 C 语言中我们通常会将一些无效的指针设置为 NULL,指向这块不允许访问的地址。
  2. 代码段:在进程运行之前,这些存放在二进制文件中的机器码需要被加载进内存中,而用于存放这些机器码的虚拟内存空间叫做代码段
  3. 数据段与BSS段:进程运行需要操作变量:大量的全局变量和静态变量。指定了初始值的全局变量和静态变量在虚拟内存空间中的存储区域我们叫做数据段。没有指定初始值的全局变量和静态变量在虚拟内存空间中的存储区域我们叫做 BSS段,在程序执行前BSS段会被清零,所以未初始化德 全局变量和静态变量的初始值是0
  4. 堆:全局变量和静态变量都是在编译期间就确定的。在进程运行期间,有可能会动态申请内存,就是用来存放动态申请的内存的。
  5. 文件映射与匿名映射区:动态链接库中的代码段,数据段,BSS 段,以及通过 mmap 系统调用映射的共享内存区,在虚拟内存空间的存储区域叫做文件映射与匿名映射区
  6. 栈:在程序运行的时候总该要调用各种函数,那么该函数对应的局部变量和参数使用来存储。

2.内核空间内存分区:

详见已发布的其他博文中的描述。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值