• <tr id='bg0n3'><strong id='bg0n3'></strong><small id='bg0n3'></small><button id='bg0n3'></button><li id='bg0n3'><noscript id='bg0n3'><big id='bg0n3'></big><dt id='bg0n3'></dt></noscript></li></tr><ol id='bg0n3'><table id='bg0n3'><blockquote id='bg0n3'><tbody id='bg0n3'></tbody></blockquote></table></ol><u id='bg0n3'></u><kbd id='bg0n3'><kbd id='bg0n3'></kbd></kbd>
  • <ins id='bg0n3'></ins>

    <i id='bg0n3'></i>

      <fieldset id='bg0n3'></fieldset>

      <i id='bg0n3'><div id='bg0n3'><ins id='bg0n3'></ins></div></i>

        <acronym id='bg0n3'><em id='bg0n3'></em><td id='bg0n3'><div id='bg0n3'></div></td></acronym><address id='bg0n3'><big id='bg0n3'><big id='bg0n3'></big><legend id='bg0n3'></legend></big></address>

        <code id='bg0n3'><strong id='bg0n3'></strong></code>

        <span id='bg0n3'></span>
          <dl id='bg0n3'></dl>

            Linux内存管理进程所涉及到的五个数据段

            • 时间:
            • 浏览:3
            • 来源:124软件资讯网

              历程(执行的法式)会占用一定数目的内存  ,它或是用来存放从磁盘载入的法式代码  ,或是存放取自用户输入的数据等等  。不外历程对这些内存的治理方式因内存用途纷歧而不尽相同  ,有些内存是事先静态分配和统一接纳的 ,而有些却是按需要动态分配和接纳的 。

              对任何一个通俗历程来讲  ,它都市涉及到5种差别的数据段 。

              Linux历程的五个段

              下面我们来简朴归纳一下历程对应的内存空间中所包罗的5种差别的数据区都是干什么的  。

              1)代码段:代码段是用来存放可执行文件的操作指令  ,也就是说是它是可执行法式在内存中的镜像  。代码段需要防止在运行时被非法修改  ,以是只准许读取操作  ,而不允许写入(修改)操作——它是不行写的  。

              2)数据段:数据段用来存放可执行文件中已初始化全局变量 ,换句话说就是存放法式静态分配的变量和全局变量 。

              3)BSS段:BSS段包罗了法式中未初始化的全局变量  ,在内存中 bss段所有置零  。

              4)堆(heap):堆是用于存放历程运行中被动态分配的内存段  ,它的巨细并不牢固  ,可动态扩张或缩减 。当历程挪用malloc等函数分配内存时  ,新分配的内存就被动态添加到堆上(堆被扩张);当使用free等函数释放内存时  ,被释放的内存从堆中被剔除(堆被缩减)

              它的物理内存空间是由法式申请的  ,并由法式卖力释放  。

              5)栈:栈是用户存放法式暂时建立的局部变量  ,也就是说我们函数括弧“{}”中界说的变量(但不包罗static声明的变量 ,static意味着在数据段中存放变量)  。除此以外  ,在函数被挪用时  ,其参数也会被压入提倡挪用的历程栈中 ,而且待到挪用竣事后 ,函数的返回值也会被存放回栈中  。由于栈的先进先出特点  ,以是栈特殊利便用来生存/恢复挪用现场  。从这个意义上讲  ,我们可以把客栈看成一个寄存、交流暂时数据的内存区  。

              它是由操作系统分配的 ,内存的申请与接纳都由OS治理