我想知道是否有人可以指向我的資源,給了堆的深入解釋。我想知道更多關於實踐中使用的頭文件以及free()函數如何通過刪除頭信息實際「釋放」內存。許多資源只是給通用堆頭和免費()在C
struct heapHeader
{
heapHeader* next;
heapHeader* previous;
unsigned int size;
}
,然後繼續說,這是從來沒有在實踐中實現。因此,總結一下,我想知道更多關於heap頭文件是如何在「練習」中實現的以及函數如free()如何與所述頭文件進行交互。
這將是特定實現。 C標準並沒有告訴一個如何實現一個堆,它只是陳述了一個C程序的語義。任何遵守這些語義的實現都是有效的。我建議下載C(GNU C作品)的開源實現。 –
查找['dlmalloc'](http://g.oswego.edu/dl/html/malloc.html)(Doug Lea Malloc)的代碼一個非常嚴重的生產質量實施。在K&R2中查看另一個實現。副手,我不知道GNU C Library是使用'dlmalloc'還是它自己的,但是如果它使用它自己的話,看看那個。 Perl包含它自己的'malloc';你可以選擇是否使用它;那將是第四個資源。 –
GNU C庫中的malloc實現的確基於Doug Lea的分配器。但當然它已經長出了自己的頭髮,就像線索在競爭和不相干的情況下分開競技場。 – Kaz