私はプログラミングの概念としてのメモリに関する本を読んでいます。後半の章の1つで、著者は「メモリ」という言葉を頻繁に使用しています。アリーナ、しかしそれを定義したことは一度もありません。私はこの言葉の意味とそれが記憶とどう関係しているかを調べましたが、何も見つかりませんでした。著者がこの用語を使用している文脈をいくつか挙げます。
「次のシリアル化の例は、特定のメモリ領域からメモリ割り当てと呼ばれる戦略を取り入れています。アリーナ」
「...これはメモリリークに対処するときや、特定のメモリから割り当てるときに便利です。アリーナ」
「...メモリを解放したい場合は、全体を解放しますアリーナ」
著者は 1 つの章でこの用語を 100 回以上使用しています。用語集にある唯一の定義は次のとおりです。
アリーナからの割り当て- 最初にアリーナを割り当て、次にアリーナ内の割り当て/解放をプログラム自体 (プロセス メモリ マネージャーではなく) で管理する手法。複雑なデータ構造とオブジェクトの圧縮とシリアル化、または安全性が重要なシステムやフォールト トレラント システムでのメモリ管理に使用されます。
誰か定義できますかアリーナこれらの状況を考えると、私にとってはどうでしょうか?
ベストアンサー1
アリーナとは、一度割り当てて、そのメモリの一部を配布することで手動でメモリを管理するために使用する、大きな連続したメモリの一部です。例:
char * arena = malloc(HUGE_NUMBER);
unsigned int current = 0;
void * my_malloc(size_t n) { current += n; return arena + current - n; }
重要なのは、メモリ割り当ての動作を完全に制御できることです。制御できないのは、初期割り当てのための単一のライブラリ呼び出しだけです。
一般的な使用例の 1 つは、各アリーナを 1 つの固定サイズのメモリ ブロックの割り当てにのみ使用するというものです。その場合、非常に効率的な再利用アルゴリズムを作成できます。もう 1 つの使用例は、「タスク」ごとに 1 つのアリーナを用意し、タスクが完了したら、アリーナ全体を一度に解放できるため、個々の割り当て解除を追跡する必要がありません。
これらのテクニックはそれぞれ非常に特殊であり、通常、自分が何をしているのか、通常のライブラリ割り当てがなぜ十分ではないのかを正確に理解している場合にのみ役立ちます。優れたメモリ アロケータは、それ自体ですでに多くの魔法を実行しており、自分でメモリを処理し始める前に、それが十分ではないという十分な証拠が必要であることに注意してください。