2012-01-17 43 views
2

由於malloc/calloc是在stdlib中爲C定義的舊實現。 有沒有什麼更好的實現可以替代malloc/calloc? 請不要回答關於malloc/calloc方法的任何包裝方法。 在C中分配內存的新實現不應該調用malloc/calloc而不是它應該實現自己的方法。有沒有比malloc/calloc更好的實現在C中分配內存?

+2

沒有「更好」的質量,只有基準。 – 2012-01-17 10:24:59

+0

你卡在C中嗎?或者你也可以使用C++嗎?你會有新的關鍵。但要小心,如果你將malloc/free與new/delete混合使用。這種方法應該做什麼樣的工作? (例如,是否可以設置最大尺寸數組,是已知的類型...) – Beachwalker 2012-01-17 10:27:29

+5

* malloc是舊的實現*舊的,因此破碎,對吧? – 2012-01-17 10:29:30

回答

1

你試過calloc()功能嗎?我從來沒有用過它,但有些人有過。

calloc tutorial link

+0

calloc只是malloc,其分配的內存爲零 – 2012-01-17 10:56:32

+0

@Paul R.是的,但考慮到原始問題缺乏有用的要求,這很容易被認爲是「更好的實現」。 – Roddy 2012-01-17 11:24:47

3

Hoard是「順便更換爲malloc()」,旨在提高內存分配的性能。

此外,dmalloc是另一種「直接替換」,其目的是使內存分配問題更容易調試。

也許這些作品適合你。這有點難以理解爲什麼你想取代malloc(),因爲你沒有給出任何理由。

10

除非你的應用程序是多線程的,否則你可能不應該打擾。 This article suggests (for one platform, at least) that malloc performs quite competitively in a single threaded environment

那麼,你應該在你的應用程序中使用哪個分配器?對於單一線程代碼,Solaris OS上的malloc顯示爲強有力的選擇。

Note the first case

Note the first case

你將很難做得比malloc或它的非常類似的功能。如果你想要更好的內存分配,你可以打包malloc或者調用操作系統的內存分配函數(但是在可移植性上失去了),並將自己的分配邏輯放在內存塊的頂部。

如果你真的需要一個更好的內存分配,儘量Hoard

囤積內存分配器是一個用於Linux,Solaris和Mac OS X的一個快速,可擴展和內存高效的內存分配,和視窗。 Hoard是malloc的一種替代品,可以顯着提高應用程序的性能,特別是對於在多處理器和多核CPU上運行的多線程程序。

Benchmark

注意it's not necessarily free。如果你想要一個免費的,請嘗試one of these

1

在谷歌的一個快速搜索顯示我沒有其他C方法來分配內存像malloc一樣有效(照顧內存對齊等)。從我看到它非常努力和難以嘗試創建你自己的malloc-replacement ...

你可以使用brk()sbrk()但它們不是標準C的一部分,它們只能在Unixy系統上正常工作。 mmap()也值得一看,但它看起來像具有相同的缺點。

1

nedmalloc可以用來代替CRT存儲器功能,它也可以注入已編譯的應用程序。

如果您使用的glibc,你不應該過於擔心,它是一個非常分配的基礎上,dlmalloc,他們只有你真的應該擔心這些天的時間是多線程分配,其中的競爭是一個問題,在這種情況下,您需要nedmalloc,tcmalloc或TBB malloc。

相關問題