在過去,我實現我自己的malloc()
(或其他語言的等價物)作爲最後的手段措施,追查有害內存相關的錯誤。由於存在良好的內存診斷和語言,因此放棄使用指針,現在不太需要這樣做。
在我的情況下,我沒有完成整個工作 - 我用malloc()
將請求的內存分配包含了圍欄數據,幻數,分配序列或時間信息等,以幫助診斷錯誤,然後調用系統malloc()
實際分配內存。
因此,呼叫p = my_malloc(nbytes)
,可能會產生這樣的內存塊:
FF00FF00 <leading fence>
<timestamp>
<allocation sequence number>
<allocation size>
nbytes of space <this is the block of memory that p will point to>
FF88FF88 <trailing fence>
...,也將寫一些診斷信息的日誌文件。然後
呼叫my_free(p)
將檢查圍欄,時間戳,序列號等,並沒有被破壞釋放所有my_malloc()
分配的內存之前(之前和之後的塊通過p
指出)。 my_malloc()
和my_free()
通常還會將一些診斷信息寫入日誌文件,以便讓我匹配分配和取消分配並查找內存泄漏的來源。當然,每次分配內存或取消分配時寫入日誌文件都會使程序減慢很多。我經常把日誌文件放在RAM磁盤上來解決這個問題。
您可能想要爲您的項目添加更多關於爲什麼需要這些信息的詳細信息,因此該問題看起來不像「閒散的好奇心」。 –
當你甚至不知道做什麼的動機時,對做某事感興趣似乎很奇怪。如果對已經研究過的東西感興趣,然後在遇到障礙時提問,會更有意義。 –
我這樣做只是爲了好玩,但我在問爲什麼像Quake這樣的專業軟件開發人員放下時間,可以用來推進他們的遊戲,並用它來利用自己的內存分配器。 – hddh