我想實現我自己的內存分配代碼,它簡單而高效。任何想法,我可以從哪裏開始。 gcc使用什麼算法?我需要一個簡單而高效的內存分配算法
回答
這是一個已被檢查和實施數百次的問題;你的實施很可能會在非常特殊的情況下運行,在其他任何地方都無法運行。試圖自己解決這個問題花費的時間非常多之前,考慮打gcc的廣義分配機制現有的實現:
http://goog-perftools.sourceforge.net/doc/tcmalloc.html
http://www.canonware.com/jemalloc/
您還可以查看GCC的執行/通過glibc的本身查看源發佈:
http://gcc.gnu.org/releases.html
Malloc是GNU C庫實現的一部分。
glibc使用tuned ptmalloc2 = http://www.malloc.de/en/,它本身基於Doug Lea的malloc aka dlmalloc。 – osgx 2012-01-16 19:19:43
如果你想要一個很簡單的方法:
// 1 KB of data that can be allocated
#define MAX_DATA 1024
char pointers[MAX_DATA];
int currentOffset = 0;
int ptrNum = 0;
int sizes[MAX_DATA];
void *malloc(int numBytes)
{
char *ptr = pointers + currentOffset;
currentOffset += numBytes;
if (currentOffset >= MAX_DATA)
return NULL;
sizes[ptrNum++] = numBytes;
return ptr;
}
void free(void *ptr)
{
currentOffset -= sizes[ptrNum--];
}
注意,記憶需要在它被分配這個工作的才能被釋放。
準確地說,它需要按照分配的儲備順序進行釋放。 – bchurchill 2015-03-06 08:58:35
GCC使用由目標平臺的C庫提供的malloc()。對於Linux,您可以在GNU C庫中找到malloc的實現:http://repo.or.cz/w/glibc.git/blob/HEAD:/malloc/malloc.c
對於通用分配器,您不太可能做得好得多,而且很可能會更糟,因爲默認分配器已經在很多不同的使用場景下進行了多年的調整。
對於某些特殊用途的分配器,那麼是的,擊敗一般用途的分配器肯定是可行的。
A malloc
它總是返回NULL符合標準的字母。所以我建議
/* always return NULL, following the letter but not the spirit
of the standard */
inline void *malloc(size_t sz)
{ errno = ENOMEM;
return NULL; }
如果速度是您的主要標準,它是相當有效的。我不認爲它有用,但你沒有要求有用。
實際malloc
是複雜的,因爲它們試圖有用和高效。它們通常建在現有的syscalls之上(例如在Linux上的mmap(2),munmap
等),並且它們經常試圖重用釋放的內存。研究例如GNU libc或musl libc的相關源代碼
- 1. 最近,我需要一個內存文件交換算法
- 2. 分配工作的高效算法?
- 3. VB.net需要內存高效功能
- 4. 朱莉婭:高效的內存分配
- 5. 什麼是確定鏈接度量的簡單高效的內存算法?
- 6. 內存分配算法
- 7. 我需要一個分頁算法幫助我的代碼?
- 8. 優化需要的分配算法
- 9. 寄存器分配算法的效率
- 10. 簡單而高效的PHP日曆
- 11. JVM需要分配一個字符數組到多少內存?
- 12. 是否構造函數總是需要一個內存分配
- 13. 經濟高效地存儲我幾個月不需要的卷?
- 14. 我需要一個地址匹配算法
- 15. 簡單算法,但運行內存
- 16. 我需要分配內存的結構的dirent
- 17. 簡單的算法分析
- 18. R永遠需要計算一個簡單的程序
- 19. 需要一個(簡單)的SQLite聲明
- 20. as3需要一個簡單的解釋
- 21. 需要做一個簡單的查詢
- 22. 需要一個簡單的linq
- 23. 需要一個簡單的查詢
- 24. 我需要一個高效的PHP數組查找
- 25. 我是否需要一個用於shared_ptr的刪除程序來釋放分配程序分配的內存?
- 26. 需要幫助構建高效的窮舉搜索算法
- 27. Microsoft.Xrm.Tooling.Connector高內存分配
- 28. 高級C內存分配
- 29. 匹配序列的高效算法
- 30. 需要一個簡單的閃存卡PHP腳本的幫助
在1..10的範圍內,其中1是最有效的,10是最簡單的,代碼應該放在哪裏? – 2012-01-16 14:11:16
我寧願現在最簡單。 – MetallicPriest 2012-01-16 14:14:37
您可能想閱讀[關於內存分配器](http://www.flounder.com/memory_allocation.htm)。 – pmg 2012-01-16 14:16:21