3

我正在通过 linux 内核源代码中的 perf 源代码来了解如何实现用户空间探测。在很多地方,我遇到了这个:

zalloc(sizeof(struct __event_package) * npevs);

我认为它位于 zlib 库中(对于 fedora 18)。谁能告诉我这个 zalloc 如何帮助分配内存?提前致谢...

4

1 回答 1

1

你可以参考这个链接:

分配与任何其他堆分配相同。在内核空间中,堆被划分为许多freelists,每个freelists都有相同大小的blocks连接成一个链表。

For eg:
Freelist1 - 4 bytes/block x 10 blocks
Freelist2 - 8 bytes/block x 10 blocks
Freelist3 - 16 bytes/block x 10 blocks
....
Freelist10 - 1024 bytes/block x 10 blocks

每个空闲列表代表slabs(slab allocator)并利用伙伴系统

因此,当一个人执行 zalloc 时,它首先决定哪个大小的 freelist 可以满足这个请求,然后从中找到一个空闲块。

在一些自定义内核实现中,堆被分为内核和其他服务。在这种情况下,*alloc 需要知道访问哪个堆来完成请求。

于 2013-06-26T00:11:52.483 回答