最佳答案
malloc在堆上分配内存,句点.
您的C库通常会保留可用内存块的列表(或更复杂的数据结构),找到一个合适的块来满足malloc(可能将更大的块拆分为多个较小的块)并将自由内存返回到列表中(可能将一些较小的块合并为一个较大的块)
只有当列表中不包含足够大的块来满足您的malloc时,库才会向OS请求更多内存,例如:使用sbrk系统调用.此系统调用返回的地址可能是虚拟地址,也可能是真实地址,具体取决于您的硬件,但作为程序员,您不能(也不需要)知道这一点.
假设malloc分配虚拟地址空间而不是堆上的块就像是说读取从硬盘读取而不是从文件中读取:它与调用者的角度无关,并不总是如此.