簡體   English   中英

Malloc /免費自己的實現

[英]Malloc/free own implementation

我目前正在嘗試編寫自己的mallocfree

在研究過程中,我發現了一些memoryspace使用以下內容的空閑memoryspace實現:

block = sbrk(totalSize);

然后還有一些其他代碼

最后他們return

return (block + 1);

但是我不明白為什么+ 1是必要的。

我不明白的另一件事是,為什么某些實現的struct有一個magic number

我已經搜索了網絡和stackoverflow,但是沒有找到問題的答案。

因此,您從分配器返回了內存。 很好,用戶可以使用它來做一些事情,並為您free的指針。 就是這樣,您得到的只是一個地址。

您應該如何僅從一個地址知道:

  1. 它是您最初分配的?
  2. 您還沒有釋放它?
  3. 它指向的內存塊有多大?

您必須將一些元數據存儲在某處 您所描述的示例所說明的方法是將元數據存儲在提供給malloc調用者的原始內存之前。 那樣,要檢索它,您要做的只是簡單的指針算術運算以及您所獲得的地址free

之后,要存儲什么元數據由您決定。 幻數是記錄下一個塊是您分配的一種方法。 如果其位模式足夠“明顯”,那么您將很少嘗試釋放尚未分配的塊。

故事出納員擁有大部分....故事! 雙關打算。

另外兩點。 首先,經常錯過的malloc()要求是返回對齊的內存。 malloc()不會告知其分配的內容,因此需要返回“最大對齊”的塊。 如果您的平台具有偶數對齊方式(2字節對齊),而int東西不能在奇數地址上開始(或者只是效率不高),則+1可能會四舍五入。 雖然在這種情況下返回奇數長度的塊並沒有多大意義。

其次,另一個智能調試功能是在塊的末尾放置一些熟悉的模式,以檢查緩沖區末尾的覆蓋(例如1個錯誤)。

我個人認為0xDEADC0D3是一個4字節的好塊,但這是我的幽默感。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM