STLの読書ノート(A)

  SGIスペースの販売代理店は、時間配分機能を持っています。

  malloc関数への第一段階コンフィギュレータ()、フリー()、のrealloc()、C関数は、実際のメモリ構成、解放、再構成演算を行い、C ++新しいハンドラと同様のメカニズムを実現するために、はい、それは直接使用できないようC ++新しいハンドラメカニズム、それはメモリ使用量:: new演算子を構成することはないので。

  いわゆるC ++新しいハンドラメカニズム需要はnew演算子たら、つまり、あなたが指定した関数を呼び出し、要件を満たすことができないときは、システムメモリの設定を求めることができ::タスクを完了することができ、スローのstd ::の悪いのalloc異常状態の前に、それは最初のクライアントによって指定された処理過程を呼び出します。治療のコースは、新しいハンドラを知られるように、一般的です。メモリの問題を解決するための新しいハンドラのアプローチは、特定のパターンを持っています。

  注、malloc関数へのSGI()の代わりに::コンフィギュレーションメモリにnew演算子(私は考えることができる理由は、C ++でのrealloc()メモリリセット動作と同等のものを提供していませんので、直接Cすることができない理由は歴史的な要因、もう一つの理由です++ C ++ set_new_handlerの使用()))(類似set_malloc_handleをエミュレートしなければなりません。

  最初は()のmalloc C言語と同様の比較的簡単な構成です。

  面積が十分に大きい場合には、第2段目のコンフィギュレータの練習は、128バイトよりも、第一段階の処理の移転に配置されました。たびに大きなメモリ構成、および空きリスト(フリー・リスト)の対応を維持するために:ブロックが128バイト未満である場合、この方法は、サブ層構成として知られている、メモリセル(メモリポール)管理を置きます。メモリ要件我々は同じ大きさを持っている場合、次の時間は、フリーリストから直接取られました。小型旅客ターミナルブロックの解除場合は、コンフィギュレータがフリーリストに回復し、はい、また、リサイクルを担当する構成を担当した構成に加えて、忘れてはいけません。管理を容易にするために、SGI第二ステージ16(例えば、請求項30Bytesでゲストは、自動的に32バイトに調整)任意のメモリ要件の小さなブロックに調整し、8の倍数を設定するためのイニシアチブを取ると空きリストを維持し、各管理サイズであろう8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128Bytesの小さなブロックがあります。次のようにフリーリストノード構造は次のとおりです。

  組合OBJ {

    組合のOBJ *のfree_list_link。

    チャーたclient_data [1]。

}


  あなたはリスト(リスト)を維持するために、各ノードが順番に追加負担もせずに別の原因となる追加のポインタ(次のノードを指す)を、必要とし、と思うかもしれませんか?あなたの懸念は正しいですが、すでに良い解決策があります。組合による、上記OBJユニオンが使用されていることに注意し、従って、第1フィールドの概念は、同じフォームに別のポイントobjを、ポインタOBJとみなすことができます。第2のフィールドのビューは、objが実際のブロックへのポインタとみなすことができます。二重目的結果は(我々はそれのメモリのオーバーヘッドを保存しようとしている)リストポインタロックを維持し、メモリの無駄を作成するために必要ではありませんが、この技術は、強力なJavaのコンバーターの言語ではなく、非動作しません例えば、C ++などの強制的な言語は非常に一般的です。

おすすめ

転載: blog.csdn.net/wujiafei_njgcxy/article/details/78314018