窗口中的虚拟地址空间
Virtual address space in windows
对不起,我是Windows驱动程序开发的新手,在阅读了WDK的这份文档后,我有一些不理解的地方。
文件上说
进程可用的虚拟地址范围为称为进程的虚拟地址空间。每个用户模式进程有自己的私有虚拟地址空间。对于32位过程中,虚拟地址空间通常在2 GB的范围内0x00000000到0x7FFFFFFF。对于64位进程地址空间是从0x000'00000000到0x7FF'FFFFFFFF。一系列虚拟地址有时被称为虚拟内存的范围。
我的问题是:
假设有一台拥有8GB内存的计算机。
- 是否所有虚拟地址空间都是从中实际分配的8 GB内存
- 如果一个进程需要分配2g的虚拟地址空间,我可以说,如果系统中有4个进程在运行。他们完全需要8GB的内存?如果答案是肯定的,这是否意味着在计算机中可以运行的最大进程数是4
我不知道我是否误解了什么。请纠正我。非常感谢。
1)否虚拟地址空间独立于物理地址空间。存在由操作系统管理的从虚拟地址到物理地址的映射。因此,分配给进程的虚拟地址并不取决于系统中的物理内存。
2) 不,同样,虚拟地址与物理地址是分开的。此外,Windows支持虚拟内存,因此即使您没有足够的物理内存来保持所有进程处于活动状态,内存也可以调出到磁盘。
相关文章:
- 子类地址等于虚拟基类地址?
- C++/地址空间:每个地址 2 个字节?
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 任务管理器 - C/C++ 应用程序 - 分配的地址空间与已用内存
- size_t ptrdiff_t和地址空间
- C++中是否有一个函数可以为您获取指向该节点的所有指针的地址空间
- ptrA = ptrB 是否等同于 ptrA = &*ptrB?,空值是否共享一个地址空间?
- 优化大型地址空间上的循环
- 如何表示指向地址空间开头的指针
- 从某个特定但很大的虚拟地址空间(例如,20GB以上)分配内存
- Do C和C++标准意味着地址空间中必须只存在一个特殊值来表示空指针的值
- 使用mprotect保护整个地址空间
- 关于取消引用和地址空间的基本C++指针问题
- 进程如何访问不属于其虚拟地址空间的内存映射 IO 地址?
- 在虚拟地址空间中使用内存映射文件
- 由 shmat 返回的指针位于地址空间的末尾,这给出了 SEG 错误
- 窗口中的虚拟地址空间
- dll是如何映射到当前程序的虚拟地址空间的
- 给定64位虚拟地址空间,任何不在堆栈上声明32KB数组的理由
- 虚拟内存地址空间不足(Borland C++Builder 6程序)