シンプルで効率的な独自のメモリ割り当てコードを実装しようとしています。どこから始めることができるのか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はチューニングされたptmalloc2 = http://www.malloc.de/en/を使用しています。これはDoug Leaのmalloc aka dlmallocに基づいています。 – osgx
あなたは本当に簡単な方法たい場合:
// 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
GCCは、ターゲットプラットフォームのCライブラリが提供するmalloc()を使用します。 Linuxの場合、GNU Cライブラリのmallocの実装は次の場所にあります。http://repo.or.cz/w/glibc.git/blob/HEAD:/malloc/malloc.c
汎用アロケータの場合、デフォルトアロケータは非常に優れていると思われますさまざまな使用シナリオで長年にわたって調整されています。
特殊目的のアロケータでは、一般的な目的のアロケータに勝ることは確かに可能です。
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. 非常にシンプルでクリーンで効率的なWordPressスターターが必要
- 2. オーバーライトと割り当て/割り当て解除の効率 - 効率
- 3. WebGLでの効率的なVBO割り当て
- 4. C++の動的割り当てメモリ内での動的メモリ割り当て
- 5. 自動/静的なメモリ割り当て
- 6. Cでの動的メモリ割り当て
- 7. ネットワークI/OとC++用のバッファの動的なメモリ割り当てと静的なメモリの割り当て
- 8. f#fibbonaci効率的なアルゴリズム
- 9. 割り当てメモリ**
- 10. メモリ割り当て
- 11. メモリ割り当て
- 12. 割り当てメモリ
- 13. メモリ割り当て
- 14. 割り当てメモリ
- 15. 2D動的メモリ割り当て - ObjectiveC
- 16. 動的割り当て - メモリ管理
- 17. C++動的メモリ割り当て
- 18. 標準的なアロケータは連続したメモリを割り当てる必要がありますか?
- 19. 予約割り当てアルゴリズム
- 20. メモリ割り当てプロファイリング中にメモリ割り当てが増加し続ける
- 21. FORTRANに割り当て可能な配列が必要です
- 22. メモリの割り当て/割り当て解除(WindowsではC++)
- 23. 内部メモリが既にヒープに割り当てられている場合、オブジェクトのメモリをヒープに割り当てる必要がありますか?
- 24. 仮想メモリの使用率が高く、iOSでの割り当てが低い
- 25. メモリ割り当てとループ
- 26. MySqlメモリ割り当て
- 27. Dalvikのメモリ割り当て
- 28. Magentoのメモリ割り当て
- 29. iphoneのメモリ割り当て
- 30. テーブルビューHeaderSectionメモリ割り当て
1.10のスケールでは、1が最も効率的で、10が最も単純です。コードはどこにあるべきですか? –
私は現時点では最もシンプルな方を好むでしょう。 – MetallicPriest
[メモリアロケータについて](http://www.flounder.com/memory_allocation.htm)をお読みください。 – pmg