虚拟内存 地址空间

转载 2016年08月31日 12:55:39

试试渲染,最合适自己的讲解方式:流程中穿插概念。

程序运行需经由内存执行。所以讲讲windows内存体系结构。

windows内存体系结构由虚拟地址空间和内存两部分组成。

内存:

如果每个程序运行都直接占用内存,那你开一个冰封王座岂不是要占1G的内存?还能不能干别的了。虚拟地址空间的设计简直是神来之笔。

给每个进程分配一个4G(32位系统来说)的虚拟地址空间。进程直接操作虚拟地址空间,读写数据时,才给它调拨物理存储器。

物理内存和虚拟内存关系:物理内存和虚拟内存对应。除OS外任何程序都不会直接访问物理内存而是访问虚拟内存。可把虚拟内存等同于物理内存。以后就只说内存,不再区分物理内存和虚拟内存。

页面文件和虚拟内存关系:可把虚拟内存等同于物理内存。改变页面文件大小可改变虚拟内存大小。详细来说:页面文件只是改变了物理内存的大小,当然也改变了虚拟内存的大小。(猜测:物理内存和虚拟内存的映射在大小上是1:1的。)可禁用页面文件但不能禁用虚拟内存。

虚拟地址空间和物理地址空间对应:虚拟地址空间指的是进程的可用地址空间范围。而物理地址空间指的是实际可用的内存空间范围。

虚拟地址空间:

虚拟地址空间也是分区的,并不是所有都可供用户使用。

系统创建进程并赋予它地址空间时,可用空间中的大部分都是闲置的或未分配的。要使用这部分地址空间,必须调用VirtualAlloc来分配其中的区域。分配区域的操作成为预订。预订地址空间时,系统会确保区域的起始地址正好是分配粒度的整数倍,区域大小正好是系统页面大小的整数倍。(分配粒度和系统页面大小据CPU不同而不同。)VirtualFree来释放分配的区域。

要使用所预定的地址空间,必须分配物理存储器,并将存储器映射到所预订的区域。此过程称为调拨物理存储器。物理存储器的调拨同预定区域一样,也是以页面为单位来进行。通过VirtualAlloc来调拨物理存储器,VirtualFree来释放物理存储器

页交换文件:

如今OS能把磁盘空间当内存使用,就是读写速度比较慢。磁盘上的文件一般称为页交换文件。把内存上的一部分保存到页交换文件中,并在应用程序需要时再将页交换文件中的对应部分载入内存。VirtualAlloc把物理存储器调拨给地址空间区域时,该空间实际上是从硬盘上的页交换文件分配的。

不在页交换文件中维护的物理存储器:

当执行一个程序时,系统会打开该程序对应的.exe文件并计算出应用程序的代码和数据的大小。然后系统会预订一块地址空间,并注明与该区域相关联的物理存储器就是.exe文件本身。系统并没有从页交换文件中分配空间,而是将.exe文件的实际内容(或叫文件映像)用作程序预订的地址空间区域。这样,不但载入程序快,而且页交换文件大小也合适。

当把一个程序位于硬盘上的文件映像(即一个.exeDLL文件)用作地址空间区域对应的物理存储器时,称这个文件映像为内存映射文件。当载入一个.exeDLL时,系统会自动预订地址空间区域并把文件映像映射到该区域,但系统也提供了一组函数,可让开发人员把数据文件映射到地址空间。

虚拟内存就是程序代码因不能直接访问物理内存而间接访问物理内存的机制。或者更具体点的这么说:虚拟内存技术说白了就是先给程序预订虚拟地址空间,再在需要时给虚拟地址空间调拨物理存储器,这样节省内存。

总汇:

举报

相关文章推荐

虚拟内存 地址空间

虚拟空间 虚拟内存 地址空间等的区别

虚拟地址空间

虚拟地址空间 转自--》》 http://msdn.microsoft.com/zh-cn/library/hh439648(v=vs.85).aspx 当处理器读或写入内存位置时,它会使用虚拟地...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

虚拟地址空间

当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势: 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大...

虚拟地址空间

当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势: 程序可以使用一系列相邻的虚拟地址来访问物理内存中不...

内存虚拟地址空间的划分空间

当我们编码的时候我们的源程序一般都放在硬盘上,然后当我们使用这个程序时电脑就会在内存上运行这个程序,然而电脑内存资源是十分紧缺的,一般电脑内存都是4g,8g,2g。。所以当我们运行程序时并不是直接在内...

Windows虚拟地址空间

整理关于WIndows虚拟地址空间的一些知识。如果有什么不对,希望有人可以提出...

Linux进程地址空间的一步步探究(转)

转自:http://soft.chinabyte.com/os/51/12324551.shtml   我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G...

Linux虚拟地址空间布局以及进程栈和线程栈总结

目录(?)[-] 一Linux虚拟地址空间布局1 内核空间2 栈stack3 内存映射段mmap4 堆heap5 BSS段   6 数据段Data   7 代码段text   8 保留区二Li...

变量存储区域的划分

计算机主要由CPU、硬盘和内存组成。而每一个程序在执行时就会产生一个进程,在Linux中,每一个进程都会有一个4G的虚拟地址空间。(以32位系统为例,Linux系统中每个进程共有3GB的用户地址空间,...

虚拟地址空间映射到物理地址空间

虚拟地址空间映射到物理地址空间参考如下   当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势:   程序可以使用...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)