我已经开始了解虚拟地址空间(VAS),我有几个问题:
- 根据架构(32 位和 64 位),为每个进程创建多少 VAS?
- 每个进程的VAS都是在硬盘上创建的吗?如果是这样,如果空间不足怎么办?
- VAS中存储的内容有哪些,如文本、数据、BSS?
答案1
每个进程都会获得所需的虚拟地址空间,最多可达特定于体系结构和配置的最大值。可以使用以下命令调整分配的内存量
brk
和sbrk
, 和mmap
。目前 x86-64 上可用的最大值是128 TiB 四级页表,64 PiB 五级页表。在 32 位 x86 上,可用的最大值取决于VM拆分配置;每个进程的大小在 1 GiB 到 3 GiB 之间变化。
不。
每个进程的地址空间包含进程可能需要访问内存的所有内容。地址空间可以在不映射到物理内存的情况下进行分配。
答案2
1
它可能因架构而异,对于 x86 / x86-64 来说是这样。
- 32位有2GB或3GB
- 64 位内核上的 32 位应用程序有 4GB
- 64 位应用程序(64 位内核)有 2⁶³GB(很多)。
2
不
3
一切:文本、数据、BSS 等。这并不意味着分配了任何物理内存。有时是延迟分配给 RAM,有时是映射到硬件,有时是映射到计算。