嗨,我正在阅读有关内存映射并寻找堆栈的信息,这个问题浮现在脑海,因为堆栈是从内存末尾开始的,但是实际上内存末尾是什么?如果是内存的最后一个地址,则对于32位OS和体系结构,每个程序应分配4GiB的内存。 MMU和虚拟内存起什么作用?
问候
答案 0 :(得分:0)
地址始终是 虚拟地址。因此,内存的结尾就是虚拟内存的结尾。您可以使用非常大的地址,例如2 ^ 32-x,但是它们是虚拟地址。
操作系统分配进程所需的物理页面。因此,它将在虚拟地址的较低端为进程的文本,数据和堆部分分配页面,在较高端为堆栈分配页面。操作系统在页表中的虚拟地址和物理地址之间创建等效项。这样,包含堆栈的高位虚拟地址将被映射到任何位置的物理地址。
在数据段和堆段与堆栈之间,存在大量未由OS分配的未使用的可用虚拟内存。因此,没有风险分配4GB到该进程。