アイデアは、mallocとフリーコールを最小限に抑えるために一度にたくさんのメモリを割り当てるメモリマネージャを作成しています。私はこれを自分自身で2回書いてみましたが、メモリを最適化する問題。メモリマネージャの作成とメモリの最適化
ブロックが頻繁に空であるかどうかを確認するだけで、空であれば削除できます。しかし、あなたのブロックがそれぞれ100バイトで、最初に20バイトのメモリを割り当てたとしましょう。ブロックがまだ存在しないため新しい100バイトブロックが作成され、80バイトが割り当てられ、最初のブロックが満たされ、この最初のブロックがいっぱいであるために別の新しいブロックが作成され、次に2番目の割り当て(80バイト)が解放され、最初の20バイトのみが使用される2つのブロックが残ります。第2のブロックから第1のブロックに20バイトを移動させ、第2のブロックを削除することによって解放することができる。
- これを更新する必要があります、そのメモリへのすべてのポインタを意味するので、あなたの周りのメモリを移動することはできませんし、それが起こることのために、あなたは彼らを知っておく必要があります。
これらは私がに走った問題がありますあなたがしていないアドレス。
- 100バイトは非常に小さなブロックサイズですが、非常に低解像度の(64,64)ARGBイメージをメモリに保存したいのですが?これは16KBのメモリを使用し、メモリマネージャをまったく書いていないよりも遅いかもしれないすべてのものを動かします。
それでもカスタムメモリマネージャを書く価値がありますか?
バディシステムを見てください - https://en.wikipedia.org/wiki/Buddy_memory_allocation –
解決する必要がある*実際のパフォーマンス上の問題はありますか?もしそうでなければ、これは早すぎる最適化だと言えます。 –
一般的に使用されているmalloc/free実装のほとんどは、問題のドメインに関する深い知識を持つ才能豊かで経験豊富なプログラマーによって書かれており、実際の使用で発見された欠陥を考慮して時間をかけて研磨されています。つまり、可能な限り実装されているわけではありませんが、最初の試みではうまくいかない可能性があります。 – rici