前端之家收集整理的这篇文章主要介绍了
malloc返回内存或虚拟地址空间,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
malloc是否在堆上分配了一块内存,还是应该称为虚拟地址空间?
我是挑剔的称它为虚拟地址空间还是这只是DOS的遗产? Linux怎么样?
编辑:
许多答案都有很多细节,但没有一个能回答我的问题.
最佳答案
malloc在堆上分配内存,句点.
您的C库通常会保留可用内存块的列表(或更复杂的数据结构),找到一个合适的块来满足malloc(可能将更大的块拆分为多个较小的块)并将自由内存返回到列表中(可能将一些较小的块合并为一个较大的块)
只有当列表中不包含足够大的块来满足您的malloc时,库才会向OS请求更多内存,例如:使用sbrk系统调用.此系统调用返回的地址可能是虚拟地址,也可能是真实地址,具体取决于您的硬件,但作为程序员,您不能(也不需要)知道这一点.
假设malloc分配虚拟地址空间而不是堆上的块就像是说读取从硬盘读取而不是从文件中读取:它与调用者的角度无关,并不总是如此.
原文链接:https://www.f2er.com/linux/440786.html