简而言之:一个进程的虚拟地址空间是连续的吗?
我需要了解内核分配给进程的虚拟地址.如果我继续错误,请纠正我.
在进程创建时,内核将虚拟内存分配给进程,并在task_struct的mm_struct中存储进程的不同段的虚拟地址的开始和结束.
现在说一个进程已经用完了堆,需要增加堆size.calls brk().
如果虚拟地址范围是连续的,那么新分配的堆块是否从最初为此进程分配的范围之外提供?或者它是以新块与原始块相邻的方式分配的.如果没有空间(因为内存映射段正在那里),该怎么办?它是如何跟踪的?
如果虚拟地址范围不连续,vm_struct如何跟踪堆(或任何其他段)的地址范围的不同块?
你可以清楚我的概念吗?