我遇到了一個採訪問題,他們要求在C++中實現malloc()和free函數。在C++中定製實現malloc
最初聲明50000大小的char數組(50000字節)。假設這是堆內存,請編寫malloc和free函數來分配內存塊並釋放內存。
任何人都可以提供給我C++工作/僞代碼或只是解釋機制? (顯然,代碼會使它更容易理解)。
感謝, 羅希特
我遇到了一個採訪問題,他們要求在C++中實現malloc()和free函數。在C++中定製實現malloc
最初聲明50000大小的char數組(50000字節)。假設這是堆內存,請編寫malloc和free函數來分配內存塊並釋放內存。
任何人都可以提供給我C++工作/僞代碼或只是解釋機制? (顯然,代碼會使它更容易理解)。
感謝, 羅希特
雖然編寫生產級動態內存分配器是一項非常艱鉅的任務,編寫玩具很簡單。這個問題顯然是爲了測試你的技能,但在別人的作品中尋找靈感還是公平的。
「The C Programming Language」by Kernighan & Ritchie contains a simple implementation of malloc
。研究它並考慮其設計和實施的含義。考慮如何改進它以更好地執行,減少片段或處理多個線程。之後,編寫自己的玩具分配器不再困難,並且回答出現的任何問題。
有幾種不同的算法可以使用。對於這樣一個小內存,我只是在每個塊的前面加上一個指向下一個 塊的指針,並在其中指明是否分配或釋放該塊。一個 分配包括找到一個足夠大的空閒塊,必要時將其分割爲 ,並將返回的塊標記爲已分配。免費的 包括標記爲免費的塊。在某些時候,您還必須 合併塊:如果兩個空閒塊相互跟隨,則合併爲 合併成一個塊。 (我在執行過程中在分配過程中這樣做了。)
上面的算法本身並不是很困難。真正的伎倆是 獲得所有不同的演員和這樣的權利。這是一個很好的練習 在非常低的水平編程。
我認爲這太寬泛了,分配器太大而不適合答案,並且基礎知識[很容易在維基百科上獲得](http://en.wikipedia.org/wiki/Memory_management#Dynamic_memory_allocation),所以添加他們在這裏價值很低。 – unwind
我認爲面試問題背後的想法是讓你考慮如何管理自己的記憶,以及如何跟蹤使用什麼和未使用的內容。努力! –
請更具體地說明你卡在哪裏。 –