1. ホーム
  2. c++

[解決済み] アリーナとは何ですか?

2022-07-21 05:09:54

質問

プログラミングの概念としてのメモリに関する本を読んでいます。後半の章の一つで、著者はこの単語を多用しています。 アリーナ という単語を多用しますが、それを定義することはありません。 私はこの言葉の意味と記憶との関係を探しましたが、何も見つかりませんでした。 以下は、著者がこの言葉を使用しているいくつかの文脈です。

次のシリアライゼーションの例では、次のような戦略を取り入れています。 メモリ割り当てを特定の アリーナ .".です。

これはメモリリークに対処するときや、特定の場所からアロケートするときに便利です。 特定の アリーナ ."

"...メモリの割り当てを解除したい場合は 全体 アリーナ ."

著者は一章で100回以上この言葉を使う。 用語集には唯一の定義があります。

アリーナからの割り当て - 最初にアリーナを割り当て、その後、プログラムによってアリーナ内の割り当て/解除を管理する手法。 アリーナ内の割り当て/解放をプログラム自身で管理する手法です。 プロセス・メモリ・マネージャではなく)プログラム自身によってアリーナ内の割り当て/解放を管理する手法です。 複雑なデータ構造やオブジェクトの圧縮や直列化。 複雑なデータ構造やオブジェクトの圧縮や直列化、セーフティクリティカルなシステムやフォールトトレラントなシステムでのメモリ管理などに使われる。 システムのメモリ管理に使用されます。

どなたか アリーナ を定義できますか?

どのように解決するのですか?

アリーナとは、単に連続した大きなメモリの一部で、一度割り当てた後、そのメモリの一部を渡して手動でメモリを管理するために使用します。たとえば

char * arena = malloc(HUGE_NUMBER);

unsigned int current = 0;

void * my_malloc(size_t n) { current += n; return arena + current - n; }

ポイントは、メモリの割り当てがどのように行われるかを完全に制御できることです。あなたのコントロールの外にある唯一のものは、最初の割り当てのための単一のライブラリ呼び出しです。

1つの一般的なユースケースは、各アリーナが1つの単一で固定されたサイズのメモリブロックを割り当てるためにのみ使用される場合です。この場合、非常に効率的な再利用アルゴリズムを書くことができます。別のユースケースは、タスクごとに 1 つのアリーナを持ち、タスクが終了したときに、アリーナ全体を一度に解放でき、個々の割り当て解除の追跡について心配する必要がない場合です。

これらのテクニックのそれぞれは非常に専門的で、一般に、何をしているのか、なぜ通常のライブラリ割り当てが十分でないのかを正確に知っている場合にのみ、便利に使用できます。優れたメモリアロケータは、すでに多くの魔法を自分自身で行っており、自分自身でメモリを処理し始める前に、それが十分でないという適切な量の証拠が必要であることに注意してください。