为什么 malloc 分配的内存多于需要的内存?

为什么 malloc 分配的内存多于需要的内存?

在使用malloc()和时,sbrk()我发现该malloc()函数总是分配最小值,135168 bytes即使1 byte有请求也是如此。为什么malloc()分配这么多内存?我可以分配4 kB内存大小。假设页块大小为4 kB

它不应该分配128 * 1024 = 131072 bytes而不是135168 bytes因为阈值是128 kB在它使用之后mmap()吗?

我很困扰。我对 的内部工作没有很深入的了解malloc()

感谢您的帮助。

答案1

这纯粹是一种优化。猜测是,如果您使用 malloc() 一次,您将多次使用它。因此,有一个初始系统调用来扩展进程空间(这会影响虚拟地址映射并且相对昂贵)。

您请求的金额是从该区域获取的,其地址是从您的 malloc() 调用中返回的。剩余的被添加到空闲列表(最初是空的)。

如果您使用任何 stdio(例如打印 sbrk() 的初始值),那么 stdio 将已经为标准输出的 FILE* 使用的缓冲区创建了第一个 malloc() :您自己的 malloc(1) 从空闲列表。

mmap() 仅用于大型单一分配。小分配使用可以轻松细分的空闲列表区域。

相关内容