c++ - Windows中的虚拟地址空间

标签 c++ windows operating-system wdk virtual-address-space

<分区>

各位,见谅我是Windows驱动开发的新手,看过之后this document from WDK ,我有一些我不明白的东西。

文件说

The range of virtual addresses that is available to a process is called the virtual address space for the process. Each user-mode process has its own private virtual address space. For a 32-bit process, the virtual address space is usually the 2-gigabyte range 0x00000000 through 0x7FFFFFFF. For a 64-bit process, the virtual address space is the 8-terabyte range 0x000'00000000 through 0x7FF'FFFFFFFF. A range of virtual addresses is sometimes called a range of virtual memory.

我的问题是:

假设有一台具有 8 GB 内存条的计算机。

  1. 所有的虚拟地址空间都是从这里实际分配的吗 8 GB 内存?
  2. 如果一个进程需要分配2g的虚拟地址空间,我可以说如果系统中有4个进程在运行。他们完全需要 8 GB 内存?如果答案是肯定的,这是否意味着在这些计算机中可以运行的最大进程数是 4?

不知道是不是我理解错了什么。请纠正我。非常感谢。

最佳答案

1) 不,虚拟地址空间独立于物理地址空间。存在由操作系统管理的从虚拟地址到物理地址的映射。因此分配给进程的虚拟地址不依赖于系统中的物理内存。

2) 不,虚拟地址与物理地址是分开的。 Windows 还支持虚拟内存,因此即使您没有足够的物理内存来保持所有进程的事件内存也可以分页到磁盘。

关于c++ - Windows中的虚拟地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348029/

相关文章:

c++ - 是否有相当于 slmgr.vbs/skms 的 C++/Winapi

linux - 在处理器的特定核心上运行进程

linux - 二进制数如何表示为字符

java - Eclipse 是否有 "vim: set ft=cpp:"或 "-*- c++ -*-"的等价物?

c++ - 为什么 STL 容器使用复制来填充调整大小?

c - Windows 链接到 libcurl_a.lib

linux - 在 git 上的两个项目之间使用符号链接(symbolic link)

python - 当我的程序崩溃时,打开的文件会发生什么情况?

c++ - C++ 中的 "Has a"关系,拥有一个类 "implement"多个抽象基类是最佳实践吗?

c++ - 将 void *user_data 转换为对象