什么是虚拟内存,它与物理内存(RAM)有何不同?它说物理内存存储在主板上,虚拟内存存储在磁盘上。
其中还说,只有当物理内存被填充时,虚拟空间才会被使用,这让我非常困惑。
那么,为什么使用虚拟内存呢?是因为RAMs空间小,不是为大存储设计的,所以使用虚拟存储来存储更大的东西吗?
接下来是关于地址的事。因为虚拟者在磁盘上,所以他们不应该共享物理记录的地址。,所以他们有独立的地址。,对吗?
和,
在编写另一个进程的内存时,为什么建议使用VirtualAlloc而不是HeapAlloc?
虚拟内存是进程依赖的,物理内存是通过进程共享的,是真的吗?
发布于 2019-10-15 04:30:09
“虚拟内存”是指存在一个有效的地址空间,它不映射到任何特定的物理内存或存储,因此是虚拟的。在现代通用操作系统中,每个进程都有自己的虚拟内存空间,具有重叠的虚拟内存地址。
为了便于管理,这个地址空间被分成几个页面(示例大小为4KB)。每个有效页面可以处于3种不同的状态:
只有当虚拟内存页被映射到物理RAM页面时,才会有某种东西存在。在其他情况下,如果进程访问该页面,则会出现CPU异常,该异常将控制转移到操作系统。然后,OS需要将该虚拟内存页映射到RAM (可能首先需要通过将当前数据交换到交换文件来释放某些RAM,或者如果从所有内存中终止某个应用程序)并将正确的数据加载到其中,或者它可以终止应用程序(地址不在有效范围,或者是只读的,但进程试图写入)。
同一内存页也可以同时映射到多个地方,例如共享内存,因此同一数据可以由多个进程一次访问(虚拟地址可能不同,因此不能共享指针变量)。
另一种使用虚拟内存的特例是将磁盘上的常规文件映射到虚拟内存(与交换文件相同,但现在由正常的应用程序进程控制)。然后OS处理从磁盘读取字节(以页面大小块的形式)并将更改写回,进程可以像任何内存一样访问内存。
每个现代的多任务通用操作系统都使用虚拟内存,因为它们运行的CPU支持虚拟内存,也因为它解决了大量问题,例如内存碎片、透明地使用交换到磁盘、内存保护.它们可以通过不同的方式来解决,但虚拟内存是当今解决的方式。
物理内存在进程之间共享,就像共享计算机电源或共享CPU一样。它是物理计算机的一部分。正常进程从不处理实际的物理内存地址,它所看到的只是虚拟内存,它可能被映射到不同的物理位置。
虚拟内存的内容通常是不共享的,除非它们是共享的(例如当使用共享内存时)。
不确定您的意思是“当为其他进程收集内存时”,所以不能回答。
发布于 2019-10-15 03:50:06
虚拟内存基本上可以看作是映射到物理地址的每个进程虚拟地址。在x86的例子中,有一个寄存器CR3指向该过程的翻译表。当分配新内存时,操作系统将分配物理内存,而物理内存甚至可能不是连续的,然后设置一个空闲的连续虚拟区域来指向该物理内存。每当CPU访问任何虚拟内存时,它都会使用CR3中的这个转换表将其转换为实际的物理地址。
更多信息register#CR3
发布于 2019-10-15 03:50:56
引用维基百科
在计算中,虚拟内存(也称虚拟存储)是一种内存管理技术,它提供了“特定机器上实际可用的存储资源的理想化抽象”,这“给用户创建了一个非常大的(主)内存的错觉”。
因为虚拟内存是一个虚幻的内存(所以,不存在),所以使用的是其他一些计算机资源,而不是RAM。在这种情况下,所使用的资源是磁盘,因为它有很大的空间,比RAM更多,在那里操作系统可以运行它的VM内容。
它还说,只有当物理内存被填充时,虚拟空间才会被使用,这让我非常困惑。
VM使用磁盘,与磁盘的I/O比对RAM的I/O慢得多。这就是为什么现在物理内存是首选的,当物理内存不够时使用VM。
那么,为什么Windows使用虚拟内存呢?是因为RAMs空间小,不是为大存储设计的,所以使用虚拟存储来存储更大的东西吗?
这是主要原因之一,是的。在过去(70年代),计算机内存非常昂贵,因此必须想出解决办法。
https://stackoverflow.com/questions/58386924
复制相似问题