<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:ui="http://projectmallard.org/ui/1.0/" type="topic" style="task" id="memory-map-use" xml:lang="zh_CN">

  <info>
    <revision pkgversion="3.11" date="2014-01-28" status="candidate"/>
    <link type="guide" xref="index#memory" group="memory"/>

    <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>

    <credit type="author copyright">
      <name>Phil Bull</name>
      <email>philbull@gmail.com</email>
      <years>2011</years>
    </credit>

    <credit type="author copyright">
      <name>Michael Hill</name>
      <email>mdhillca@gmail.com</email>
      <years>2011, 2014</years>
    </credit>

    <desc>查看进程的内存映射。</desc>
  
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Victor_Trista</mal:name>
      <mal:email>ljlzjzm@hotmail.com</mal:email>
      <mal:years>2023</mal:years>
    </mal:credit>
  </info>

  <title>使用内存映射</title>

  <p><gui>虚拟内存</gui> 代表系统中 <gui>物理内存</gui> 和 <link xref="mem-swap">交换空间</link> 的组合。通过将物理内存中的位置 <gui>映射</gui> 到磁盘中的文件，它使正在运行的进程能够访问现有物理内存以外的<em>更多</em>内存。当系统需要的内存页面多于可用内存页面时，一些现有页面将被 <em>调出</em> 或写入 <gui>交换空间</gui>。</p>

  <p><gui>内存映射</gui> 显示进程的总虚拟内存使用量，并可用于确定运行单个或多个程序实例的内存开销，确保使用正确的共享库，查看调整程序可能具有的各种性能调优参数的结果，或诊断内存泄漏等问题。</p>

  <p>要显示进程的 <link xref="memory-map-what">内存映射</link>：</p>

  <steps>
    <item><p>点击 <gui>进程</gui> 选项卡。</p></item>
    <item><p>在<gui>进程列表</gui>中右键单击进程。</p></item>
    <item><p>点击 <gui>内存映射</gui>。</p></item>
  </steps>

<section id="read">
  <title>查看内存映射</title>

  <list>
    <item>
      <p>地址以十六进制（基数为 16）显示。</p>
    </item>
    <item>
      <p>大小以 <link xref="units">IEC 二进制词头</link> 显示。</p>
    </item>
    <item>
      <p>在运行时，进程可以将更多内存动态分配到被称为 <em>堆</em> 的区域，并将参数和变量存储到另一个被称为 <em>堆栈</em> 的区域。</p>
    </item>
    <item>
      <p>程序本身和每个共享库各有三个入口，分别是读/执行代码段、读/写数据段和只读数据段。所有的数据段都需要在交换时调出。</p>
    </item>
  </list>

<table shade="rows" ui:expanded="false">
<title>属性</title>
  <tr>
	  <td><p>文件名</p></td>
	  <td><p>当前进程使用的共享库的位置。如果这个字段是空的，这一行的内存信息描述的是由进程拥有的内存，其名字显示在内存映射表的上方。</p></td>
  </tr>
  <tr>
	  <td><p>VM 开始于</p></td>
	  <td><p>内存段开始的地址。VM 开始、VM 终止和 VM 偏移量共同指定共享库映射到磁盘的位置。</p></td>
  </tr>
  <tr>
	  <td><p>VM 终止于</p></td>
	  <td><p>内存段结束的地址。</p></td>
  </tr>
  <tr>
	  <td><p>VM 大小</p></td>
	  <td><p>内存段的大小。</p></td>
  </tr>
  <tr>
	  <td><p>标志</p></td>
	  <td><p>以下标志描述了进程可以拥有的内存段访问的不同类型：</p>
    <terms>
      <item>
        <title><gui>p</gui></title>
        <p>内存段是该进程私有的，其他进程无法访问。</p>
      </item>
      <item>
        <title><gui>r</gui></title>
        <p>该进程有权从内存段读取。</p>
      </item>
      <item>
        <title><gui>s</gui></title>
        <p>内存段与其他进程共享。</p>
      </item>
      <item>
        <title><gui>w</gui></title>
        <p>该进程有权写入内存段。</p>
      </item>
      <item>
        <title><gui>x</gui></title>
        <p>该进程有权执行内存段中的指令。</p>
      </item>
    </terms>
    </td>
  </tr>
  <tr>
	  <td><p>VM 偏移</p></td>
	  <td><p>内存段中地址的位置，以 VM 开始位置为基准。</p></td>
  </tr>
  <tr>
	  <td><p>私有的，共享的，未被修改的，已被修改的</p></td>
<!--	  <td><p>Text pages are flagged read-execute in memory and don't need to
  be written to swap since they can be re-loaded from their original location
  on disk. Data pages have read-write permissions, and if modified when in
  memory, they are labeled <em>dirty</em>, and when designated for swapping,
  must be paged out.</p></td>
-->
          <td><list><item><p><em>私有的</em> 页面仅被一个进程访问</p></item>
          <item><p><em>共享的</em> 页面可以被多个进程访问</p></item>
          <item><p><em>未被修改的</em> 页面在内存中还没有被修改，可以在指定交换出内存时丢弃</p></item>
          <item><p><em>已被修改的</em> 页面在内存中已被修改，必须在指定交换出内存时写入磁盘</p></item></list></td>
  </tr>
  <tr>
	  <td><p>设备</p></td>
	  <td><p>共享库文件名所在设备的主要和次要编号。它们对应着系统的磁盘分区。</p></td>
  </tr>
  <tr>
	  <td><p>Inode</p></td>
	  <td><p>Inode 是文件系统用来存储文件的结构，其编号是唯一的。共享库的位置通过它加载到内存中。</p></td>
  </tr>
</table>

</section>
</page>
