malloc 是在堆上分配一块内存还是应该将其称为虚拟地址空间?
我是否挑剔地将其称为“虚拟地址空间”,或者这只是 DOS 的遗产? Linux 怎么样?
EDIT:
很多答案都很详细,但没有一个回答我的问题。
malloc
在堆上分配内存,期间。
您的 C 库通常保留可用内存块的列表(或一些更复杂的数据结构),找到合适的块来满足malloc
(可能将一个较大的块分割成多个较小的块)并返回free
将内存添加到列表中(可能将一些较小的块合并为一个较大的块)
Only当列表不包含足够大的块来满足您的需求时malloc
,库将向操作系统请求更多内存,例如使用sbrk http://en.wikipedia.org/wiki/Sbrk系统调用。此系统调用返回的地址可能是虚拟地址,也可能是真实地址,具体取决于您的硬件,但作为一名程序员,您无法(也不需要)知道这一点。
这么说malloc
分配的虚拟地址空间而不是堆上的块就像是说read
从硬盘而不是文件读取:从调用者的角度来看,这是无关紧要的,而且并不总是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)