[英]Malloc/free own implementation
我目前正在嘗試編寫自己的malloc
和free
。
在研究過程中,我發現了一些memoryspace
使用以下內容的空閑memoryspace
實現:
block = sbrk(totalSize);
然后還有一些其他代碼
最后他們return
:
return (block + 1);
但是我不明白為什么+ 1
是必要的。
我不明白的另一件事是,為什么某些實現的struct
有一個magic number
。
我已經搜索了網絡和stackoverflow,但是沒有找到問題的答案。
因此,您從分配器返回了內存。 很好,用戶可以使用它來做一些事情,並為您free
的指針。 就是這樣,您得到的只是一個地址。
您應該如何僅從一個地址知道:
您必須將一些元數據存儲在某處 。 您所描述的示例所說明的方法是將元數據存儲在提供給malloc
調用者的原始內存之前。 那樣,要檢索它,您要做的只是簡單的指針算術運算以及您所獲得的地址free
。
之后,要存儲什么元數據由您決定。 幻數是記錄下一個塊是您分配的一種方法。 如果其位模式足夠“明顯”,那么您將很少嘗試釋放尚未分配的塊。
故事出納員擁有大部分....故事! 雙關打算。
另外兩點。 首先,經常錯過的malloc()
要求是返回對齊的內存。 malloc()
不會告知其分配的內容,因此需要返回“最大對齊”的塊。 如果您的平台具有偶數對齊方式(2字節對齊),而int
東西不能在奇數地址上開始(或者只是效率不高),則+1
可能會四舍五入。 雖然在這種情況下返回奇數長度的塊並沒有多大意義。
其次,另一個智能調試功能是在塊的末尾放置一些熟悉的模式,以檢查緩沖區末尾的覆蓋(例如1個錯誤)。
我個人認為0xDEADC0D3
是一個4字節的好塊,但這是我的幽默感。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.