zoukankan      html  css  js  c++  java
  • Chap-6 6.4.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:权限可读写、不可执行;无映像文件,匿名,可向下扩展

  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/miaoyong/p/3514600.html
Copyright © 2011-2022 走看看