2013-06-20 18 views
3

我正在瀏覽linux內核源代碼中的perf源,以瞭解如何實現用戶空間探測。在很多地方,我遇到過這樣的問題:zalloc分配內存

zalloc(sizeof(struct __event_package) * npevs); 

我想它位於zlib庫(用於fedora 18)。任何人都可以告訴我這個zalloc如何幫助分配內存? 在此先感謝...

回答

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需要知道要訪問哪個堆來滿足請求。

+0

好的,謝謝你...... –