一、布局图

二、说明

名称

存储内容

stack

局部变量、函数参数、返回地址等。

heap

动态分配的内存。

bss

未初始化 或 初值为0 的全局变量和静态局部变量。

data

已初始化 且 初值非0 的全局变量和静态局部变量。

text

可执行代码、字符串字面值、只读变量。

reserved 不可访问,用于捕捉使用空指针和小整型值指针引用内存的异常情况。

Random stack offset

Random mmap offset

Random brk offset

意在防止恶意程序。

Linux通过对栈、内存映射段、堆的起始地址加上随机偏移量来打乱布局,以免恶意程序通过计算访问栈、库函数等地址。

mmap 磁盘上的文件映射到虚拟地址空间中,用于装载动态共享库。

三、拓展

1、分段的好处。

  • 进程运行过程中,代码指令根据流程依次执行,只需访问一次(当然跳转和递归可能使代码执行多次);而数据(数据段和BSS段)通常需要访问多次,因此单独开辟空间以方便访问和节约空间。
  • 当程序被装载后,数据和指令分别映射到两个虚存区域。数据区对于进程而言可读写,而指令区对于进程只读。两区的权限可分别设置为可读写和只读。以防止程序指令被有意或无意地改写。
  • 现代CPU具有极为强大的缓存(Cache)体系,程序必须尽量提高缓存命中率。指令区和数据区的分离有利于提高程序的局部性。现代CPU一般数据缓存和指令缓存分离,故程序的指令和数据分开存放有利于提高CPU缓存命中率。
  • 当系统中运行多个该程序的副本时,其指令相同,故内存中只须保存一份该程序的指令部分。若系统中运行数百进程,通过共享指令将节省大量空间(尤其对于有动态链接的系统)。其他只读数据如程序里的图标、图片、文本等资源也可共享。而每个副本进程的数据区域不同,它们是进程私有的。
  • 临时数据及需要再次使用的代码在运行时放入栈区中,生命周期短。全局数据和静态数据可能在整个程序执行过程中都需要访问,因此单独存储管理。堆区由用户自由分配,以便管理。

参考链接:https://www.cnblogs.com/beixiaobei/p/10507462.html

(SAW:Game Over!)

OS / Linux / 进程的虚拟地址空间布局相关推荐

  1. 【Linux内核】虚拟地址空间布局架构

    虚拟地址空间布局架构(Linux内核学习) 1.Linux内核整体架构及子系统 内核对下管理硬件,对上通过运行时库对应用提供服务 用户空间 使用malloc()分配内存通过free()释放内存 内核空 ...

  2. Linux进程的内存空间布局

    此文也可看作是Linux下C程序的内存空间布局(虚拟地址),因为在Linux下的C编译器本质上也是一个进程,编译器再强大也得在操作系统的保护模式下运行. 内存空间布局 在Linux中,进程的内存空间按 ...

  3. Linux进程3——虚拟地址访问

    1.虚拟地址到物理地址 X86芯片访问内存,需要使用MMU功能,实现虚拟地址到线性地址,再到物理地址的访问. X86的分段机制是强制的,分页机制是可选的. 2.分段机制 X86的虚拟地址,由选择符:偏 ...

  4. Linux X86_64位虚拟地址空间布局与试验

    Linux虚拟地址布局 x64 layout 在x86_64下面,其实虚拟地址只使用了48位.所以C程序里,打印的地址都是只有12位16进制.48位地址长度也就是对应了256TB的地址空间. 而在Li ...

  5. Linux 进程虚拟地址空间布局

    文章目录 1.虚拟地址空间简介 2.虚拟地址空间布局 参考文献 1.虚拟地址空间简介 虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配的虚拟内 ...

  6. linux进程--虚拟地址空间布局(十一)

    在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中.这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块.在Linux系统中, 内核进 ...

  7. 【Linux 内核 内存管理】虚拟地址空间布局架构 ③ ( 内存描述符 mm_struct 结构体成员分析 | mmap | mm_rb | task_size | pgd | mm_users )

    文章目录 一.mm_struct 结构体成员分析 1.mmap 成员 2.mm_rb 成员 3.get_unmapped_area 函数指针 4.task_size 成员 5.pgd 成员 6.mm_ ...

  8. 【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

    文章目录 一.虚拟地址空间布局架构 二.用户虚拟地址空间划分 一.虚拟地址空间布局架构 在 646464 位的 Linux 操作系统中 , " ARM64 架构 " 并 不支持 6 ...

  9. Linux虚拟地址空间布局

     在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中.这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块.在Linux系统中, ...

最新文章

  1. App_GlobalResources、App_LocalResources (理论篇)(
  2. 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述
  3. 数据库原理学习笔记(一)关系完整性以及数据库完整性
  4. sqlmap安装_黑客神器系列篇章之“sqlmapquot;
  5. zencart 后台 tool-define page editor define define_main_page.php
  6. char添加一个字符_给你五十行代码把图片变成字符画!程序:太多了,一半都用不完...
  7. Android 监听耳机的插拔事件
  8. 游标sql server_SQL Server游标教程
  9. Python基础——positional argument vs keyword argument
  10. Struts框架命名空间问题答疑
  11. STM8S系列基于STVD开发,标准外设库函数开发环境搭建
  12. c语言从入门到弃坑,从入门到放弃?《全面战争:三国》是怎么让我半小时内弃坑的...
  13. 不要STUPID,坚持GRASP和SOLID
  14. python循环读取excel存入列表_python3 循环读取excel文件并写入json操作
  15. jQuery table组织架构图表插件
  16. python 爬取懂车帝详情页“全部车型模块信息”
  17. 2021总结及智能设备汇总
  18. 数据库事务 ACID
  19. 基于JAVA汽车租赁系统 (Springboot框架) 开题报告
  20. 星环科技StellarDB4.0正式发布:性能数倍提升,万亿级图数据库挖掘海量数据互联价值

热门文章

  1. mongoDB入门必读(概念与实战并重)
  2. Windows Server 2012改造成Windows8的方法(转载)
  3. [基础算法]通过后缀表达式实现表达式的计算
  4. kubeadm加载k8s镜像实现集群搭建
  5. Linkis1.0下载地址
  6. 案例实操:Azkaban调度spark作业
  7. k8s 给worker/master节点打标签(角色标签)
  8. golang函数多值返回示例
  9. linux 产生0~100内的随机数
  10. Python3类方法和静态方法