malloc是在堆上分配一 block 内存还是应该叫虚拟地址空间?
我是在挑剔地称它为虚拟地址空间,还是这只是 DOS 的遗留问题? Linux 怎么样?
编辑:
许多答案都非常详细,但没有一个能回答我的问题。
最佳答案
malloc
在堆上分配内存,期间。
您的 C 库通常保留可用内存块的列表(或一些更复杂的数据结构),找到合适的 block 来满足 malloc
(可能将较大的 block 拆分为多个较小的 block ) 并将 free
的内存返回到列表中(可能将几个较小的 block 合并成一个更大的 block )
仅当列表不包含足够大的 block 来满足您的malloc
时,库将向操作系统请求更多内存,例如使用 sbrk系统调用。此系统调用返回的地址可能是虚拟地址,也可能是真实地址,具体取决于您的硬件,但作为程序员,您不能(也不需要)知道这一点。
说 malloc
分配虚拟地址空间而不是堆上的 block 就像说 read
从硬盘读取而不是从文件读取一样:这是无关紧要的从调用者的角度来看,并不总是正确的。
关于c - malloc 返回内存或虚拟地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728077/