2014-03-29 70 views
5

關於我最近遇到的稱爲zmalloc的函數,在線或關於計算器的信息很少。 (實際上,這僅僅是第三個zmalloc-SO問題)。什麼時候會使用malloc over zmalloc?

我收集以下:

  • zmalloc自動跟蹤的,並釋放unfreed存儲器,類似於C++智能指針。
  • zmalloc顯然使一些指標,至少在the case of the redis source

所以我的問題是:

  1. 沒有一個失去什麼彈性,那麼,在使用zmalloc過的malloc?即malloc繼續提供zmalloc不會提供哪些好處?
  2. C11中zmalloc非標準嗎?這是一個定製功能嗎?

回答

9

它看起來像zmalloc是redis工具(https://github.com/antirez/redis-tools)的一部分。 redis是一種將內容保存在內存中的數據庫(http://redis.io/)。

由於一些目標系統沒有提供合適的malloc或者因爲調用者需要額外的功能,所以通常會開發malloc替換。我認爲zmalloc是系統malloc/free的一個非常簡單的包裝,只是跟蹤分配的整個內存。沒有自動免費參與。您指出的帖子也解釋了需求:可以將數據庫配置爲不使用超過一定數量的內存,因此需要跟蹤整體消耗。

+0

感謝彼得,根據stackoverflow標籤的描述,它自動釋放...你會說標籤是錯的,然後呢? –

+1

是的,標籤wiki是錯誤的。我已經提出了一個修改來修復它。作爲一個旁註,'zmalloc()'不是我迄今見過的最好的代碼,它增加了比必要的更多的開銷。當然,這個開銷被'malloc()'本身的開銷所掩蓋,但是這樣的代碼應該由知道如何優化的人寫出來...... – cmaster

+1

@cmaster:什麼特別引起你的注意力不夠理想? –