我正在浏览linux内核源代码中的perf源,以了解如何实现用户空间探测。在很多地方,我遇到了这个:
zalloc(sizeof(struct __event_package) * npevs);
我认为它位于zlib库中(对于fedora 18)。谁能告诉我这个zalloc如何帮助分配内存? 提前谢谢......
答案 0 :(得分:1)
您可以参考此link:
分配与任何其他堆分配相同。在内核空间中,堆被分成许多空闲列表,每个空闲列表都有一个链接列表中相同大小的块。
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
每个免费列表代表平板(slab allocator)并使用buddy system
因此,当一个人执行zalloc时,它首先决定哪个大小的空闲列表可以满足此请求,然后从中找到一个空闲块。
在一些自定义内核实现中,堆在内核和内核之间划分。其他服务。在这种情况下,* alloc需要知道要访问哪个堆来完成请求。