虚拟地址空间的区域划分

本文探讨了32位Linux环境下虚拟地址空间的划分,包括代码段(.text)、数据段(.data, .bss)、堆、动态链接库、栈以及命令行参数和环境变量等区域。讲解了不同区域的作用,例如只读数据存储在.text段,初始化数据在.data和.bss段,动态内存分配在堆上,函数调用和线程栈在栈上。同时指出,操作系统如何保护进程的地址空间并实现进程间通信。" 125047028,12291003,剧本杀市场发展与挑战,"['娱乐', '大数据']
摘要由CSDN通过智能技术生成

本篇接下来所讨论的范围在x86体系32位Linux环境下。
虚拟地址空间由虚拟内存来提供的,关于虚拟内存的三个重要能力:

  1. 它将主存(RAM)看成是一个存储在磁盘(ROM)上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这样来高效使用主存
  2. 它为每一个进程提供了一致的地址空间,从而简化了内存管理
  3. 保护每个进程的地址空间不被其他进程破坏

Linux系统会当前每一个进程分配一个2^32位大小(4G)的一块空间,这块空间就叫做进程的虚拟空间。
IBM公司关于虚拟的解释:

它存在,你看得见,它是物理的
它存在,你看不见,它是透明的
它不存在,你看得见,它是虚拟的
它不存在,你看不见,它被删除

空间的具体内容如下图所示:
在这里插入图片描述
接下来分别阐述每一块空间的作用

  • 从0x00000000到0x08048000的这段空间是预留的,是不能访问的,例如对空指针进行访问程序就会崩溃

  • 程序运行时产生的指令就放在.text段(代码段)。这一段同时也保存了只读数据(read only data),例如char* p = “hello world"中的"hello world”,在这里,当想

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值