博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Chap-6 6.4.2 堆和栈
阅读量:4315 次
发布时间:2019-06-06

本文共 860 字,大约阅读时间需要 2 分钟。

6.4.2 堆和栈

在操作系统里面,VMA除了被用来映射可执行文件中的各个segment,操作系统还使用VMA来对进程的地址空间
进行管理。进程在执行的时候还需要用到堆(heap)和栈(stack)等空间,一个进程中的栈和堆分别都有一个
对应的VMA,在Linux下,可以通过/proc来查看进程的虚拟空间分布,下面查看一个死循环的虚拟空间分布:

***图6.4.2***
第一列是VMA的地址范围;第二列是VMA的权限,“p”表示私有(COPY ON WRITE,COW),“s”表示共享;第三列
表示VMA对应的segment在文件中的偏移;第四列表示映像文件所在设备的主设备和次设备号;第五列表示
映像文件的节点号(inode);最后一列表示映像文件的路径。我们用ll命令查看该ELF可执行文件的inode号,
如图6.4.3所示:

***图6.4.3***
第一列即是该ELF文件对应的inode号码,这个号码和图6.4.2中第五列的inode号码相同。

从图6.4.2中可以看出,只有前两个是映射到可执行文件的segment,另外4个segment所在的主设备和次设备号

都是0,表示它们没有映射到文件中,这种VMA叫做匿名虚拟内存区域(Anonymous Virtual Memory Area)。其中
的两个segment是堆(heap)和栈(stack),函数是从堆里面分配的,堆由系统库管理。

ELF可执行文件将相同权限属性的section映射到同一个segment,一个segment对应一个VMA。操作系统通过VMA来

管理进程的虚拟地址空间,一个进程基本上可以分为如下几种VMA区域:
代码VMA:权限只读、可执行;有映像文件
数据VMA:权限可读写、可执行;有映像文件
堆VMA:权限可读写、可执行;无映像文件,匿名,可向上扩展
栈VMA:权限可读写、不可执行;无映像文件,匿名,可向下扩展

转载于:https://www.cnblogs.com/miaoyong/p/3514600.html

你可能感兴趣的文章
js实现图片上传及预览---------------------->>兼容ie6-8 火狐以及谷歌
查看>>
WCF4.0 –- RESTful WCF Services (1) (入门)
查看>>
开源管理系统OSSIM设置 语言为中文简体
查看>>
解决winform中mdi子窗体加载时显示最大化最小化按钮的方法
查看>>
Matlab 与 c++对txt 文档的读写格式
查看>>
ATITIT.翻译模块的设计与实现 api attilax 总结
查看>>
Posix消息队列实现机制
查看>>
win8/8.1 免密码登录设置
查看>>
Flask实战第53天:cms编辑轮播图功能完成
查看>>
Android相关的ADB命令
查看>>
c语言typedef关键字的理解
查看>>
vue click事件获取当前元素属性
查看>>
Netty与网络编程
查看>>
mybatis查询语句的背后之参数解析
查看>>
Hadoop工程师面试题(1)--MapReduce实现单表汇总统计
查看>>
如何使用Windows Library文件进行持久化
查看>>
查看和调试Qt源码(动态编译的QT也可进入源码)good
查看>>
关于DCMTK3.6.1源代码编译的总结
查看>>
我为什么离开神州泰岳
查看>>
高级环境编程要看的
查看>>