所以我有這個任務來實現我自己的malloc並在C中免費。這個問題是memory_free(void *ptr)
函數的要求之一。如果指針無效,它必須返回1,即它沒有被memory_alloc(unsigned int size)
分配,否則返回0。我只是無法想出一個辦法來做到這一點,沒有絕對時間效率低下。malloc指針識別
所以我的內存結構是這樣的:我有一個全局指針指向數組的開始,我可以充當堆。每個內存塊都有一個int
頭文件來說明它的大小以及它是否空閒。
這是我memory_free(無效* PTR)的功能,現在,TYPE是typedef unsigned int
:
int memory_free(void *ptr)
{
void *head = ptr;
if (head == NULL)
return 1;
head -= sizeof(TYPE);
if (!((*(TYPE*) head) & 1))
return 1;
(*(TYPE*) head) &= ~0x1;
return 0;
}
指針ptr
點到用戶塊的第一個字節,這意味着如果我想讀頭,我必須返回4個字節。檢查指針有效性的一種解決方案是從頭開始查看堆,然後看看我是否遇到了標題,但這不是時間效率高的。誰能告訴我更好的方法?
這段代碼到底有多嚴重?我看起來很有效率。主要關心的是代碼看起來完全不安全。如果沒有某種查找表記錄實際存在的內存塊,我不會實現動態內存分配算法。如果指針指向隨機垃圾會怎麼樣?如果用戶錯誤地在同一對象上調用memory_free兩次會怎麼樣? – Lundin 2014-10-10 13:28:18
這就是我的問題。我不得不在每次調用memory_free時都進行測試。這就是我的問題:)。要明確,我現在基本上不檢查它,因爲這些條件在一半時間內都是成功的。 – Slaaavo 2014-10-10 13:30:43
如果是這樣,你如何期望任何人能夠回答,而不提供有關你如何分配和跟蹤記憶的信息? – Lundin 2014-10-10 13:36:04