最佳答案
malloc在堆上分配内存,句点.
您的C库通常会保留可用内存块的列表(或更复杂的数据结构),找到一个合适的块来满足malloc(可能将更大的块拆分为多个较小的块)并将自由内存返回到列表中(可能将一些较小的块合并为一个较大的块)
只有当列表中不包含足够大的块来满足您的malloc时,库才会向OS请求更多内存,例如:使用sbrk系统调用.此系统调用返回的地址可能是虚拟地址,也可能是真实地址,具体取决于您的硬件,但作为程序员,您不能(也不需要)知道这一点.
假设malloc分配虚拟地址空间而不是堆上的块就像是说读取从硬盘读取而不是从文件中读取:它与调用者的角度无关,并不总是如此.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。