【发布时间】:2021-11-08 16:14:03
【问题描述】:
我在一次测验中被问到 malloc() 库调用将始终调用 mmap() 或 brk()。答案是假的。我无法理解这怎么可能?
【问题讨论】:
-
假设您致电
malloc(1024)。malloc调用mmap或brk来获取它需要的内存。稍后,您使用该内存调用free,内存分配例程会更新其数据库以显示内存再次可用。然后你再次拨打malloc(1024)。这一次,内存分配例程已经有了内存,所以不需要调用mmap或sbrk;他们只是给你已经可用的内存。 -
作为一个简单的反例,想象一个
malloc实现调用例如mmap在第一次调用时获得一块巨大的内存,分发其中的一部分,然后只使用剩下的部分。 -
您链接的答案中没有回答您的问题吗?
-
您的问题是,为什么
malloc并不总是使用mmap或brk来实现? -
@sepp2k 不,链接的答案解释了 malloc() 的内部工作,因此我得出结论,总是调用 mmap() 或 brk() 但 Eric Postpischil 消除了混乱
标签: c