malloc()如何在内部实现?

谁能解释malloc()内部工作原理?

有时我已经做完了,strace program而且我看到了很多sbrk系统调用,但都在man sbrk谈论它的使用情况,malloc()但仅此而已。


慕斯709654
浏览 491回答 3
3回答

慕神8447489

简单地说,malloc和自由工作是这样的:malloc提供对进程堆的访问。堆是C核心库(通常为libc)中的构造,该构造允许对象获取对该进程堆上某些空间的排他访问。堆上的每个分配称为堆单元。它通常由一个包含有关单元大小的信息的头以及指向下一个堆单元的指针组成。这有效地使堆成为链表。当启动一个进程时,堆包含一个单元,该单元包含启动时分配的所有堆空间。该单元格存在于堆的空闲列表中。当一个调用malloc时,内存将从大堆单元中获取,这由malloc返回。其余部分组成一个新的堆单元,该堆单元由其余所有内存组成。当一个人释放内存时,堆单元将添加到堆的空闲列表的末尾。随后的malloc在空闲列表中查找合适大小的单元。可以预见的是,堆可能会碎片化,并且堆管理器可能会不时尝试合并相邻的堆单元。当空闲列表上没有剩余内存可用于所需分配时,malloc调用brk或sbrk,这是系统调用,要求操作系统提供更多内存页。现在进行了一些修改以优化堆操作。对于较大的内存分配(通常> 512字节),堆管理器可能会直接进入OS并分配完整的内存页面。堆可以指定最小分配大小,以防止发生大量碎片。堆也可以将自身划分为bin,一个用于较小的分配,另一个用于较大的分配,以更快地进行较大的分配。还有一些优化多线程堆分配的巧妙机制。
打开App,查看更多内容
随时随地看视频慕课网APP