STLのソースコード解析(1)

  最近混乱時に侯杰の先生は最初のパスを参照する「STLのソースコード解析」を見て、何度Duokanjibian、それのいくつかを理解しているようです。したがって、記録を行うことを学んだ、それはレコードの自分自身の学習過程とみなすことができます。ブログのこのシリーズは、主に、物事のマクロの理解のいくつかを記録し、または元の本を味わう慎重に特定のコードを実装します。

概要

  ディスペンサー容器、反復子、アルゴリズム、ファンクタアダプタ:主に6つのコンポーネント、すなわち成るすなわちSTL C ++標準テンプレートライブラリ、。6つのコンポーネントの性能との間のこの対話の関係は次のとおり分配製データ貯蔵容器、反復子を介して容器の内容物にアクセスするためのアルゴリズム、ファンクタアルゴリズムは完全に異なる修飾戦略の変更、またはソケットアダプタがファンクタができる助けることができます、イテレータ、コンテナなどが挙げられます。
  主な構成要素、オブジェクト指向と汎用プログラミングの最初の外観、(OOPを呼ぶオブジェクト指向プログラミング)オブジェクト指向プログラミングを導入する前に、C ++クラスで、例えば、一緒にデータを処理するためのデータとメソッドを入れしようとし、一般的に使用したいときにオブジェクトを作成し、プロセスのメンバ関数のメンバ変数とメンバ変数を持っているし、それらを呼び出すためにオブジェクト。そして汎用プログラミング(ジェネリックプログラミング、GPと称する)は、データ処理方法であって、分離、処理方法は、一般的にグローバル関数であり、例えばSTLアルゴリズムとコンテナに、両方の互いに独立の、反復子によって要求されたとき情報を伝えるために。
  さて、その後、STLの内部関係を理解し、6つの部分から始めます。このブログレコードの販売代理店の主な焦点。

ディストリビュータ(アロケータ)

  アロケータは、主にオペレータと呼ばれている順番に)(new演算子はC言語のmalloc()関数をコールする空間、および割り当て解除()を割り当てるために、記憶領域を管理する(間にそれを割り当てる)新しい演算子()を呼び出すために使用します削除()、これは、オペレータは、削除()と空きメモリへfree()を呼び出します。このようなディスペンサーは、標準仕様の下で実装について話をする方です。:各コンテナは、デフォルトの分配空間を指定したデフォルトSGI STLディスペンサALLOCは、そこALLOC、例えば、以下の宣言ベクトルである
テンプレート<クラスT、のAlloc =のALLOCクラス>
クラスベクトル{...} ;
  ディスペンサーのデフォルトのalloc使用されています。専用メモリのいくつかの小さなブロックの全体ピースに比較的大きな空間が廃棄物の問題を引き起こす可能性が見つけるためにmalloc()を呼び出しているので、したがって、SGIは、二段分周器、直接malloc関数を用いて第1のクラスの分配()と自由に設計しました()は、第二段目の分配は、必要に応じて異なる戦略である:アロケーションブロックが「十分に大きい」と見なさ128のバイトを超えた場合、分配初段分配ブロックは、128バイト未満れる呼び出し第二レベルの分配器の使用には、追加の負荷(資源の使用の合理化)を低減するために、「小さすぎる」とみなしたとき、。
  それらが同じサイズを有する場合、(増加も切断することができる)に次のメモリ要件に対応するメモリ・プール管理、毎回大きなメモリ構成、およびメンテナンスフリーリストの形でディスペンサーの第二段階の具体的な実施小さなメモリ解放側場合、対応するリストにアロケータによって回収し、フリーリストから直接採取しました。管理を容易にするために、SGI第二段階の分配が自動的に(例えば、ユーザは、32のバイトを30バイトを必要と自動的に調整される)任意のブロックの8つの小さなメモリ要件の倍数に調整し、16自由を維持しますリンクされたリスト、管理可能なサイズのそれぞれは、次のとおり小さな8,16,24,32,40,56,64,72,80,88,96,104,112,128バイトブロック(例えば:最初のリストセルサイズの全ての管理空間へのノード)は、第2のノードは、高速16バイトのセルサイズの全てを管理し、8バイト高速であり、等々 。
  したがって、以下のように、全体のリリースプロセスメモリ割り当てプロセスを要約することができる機能ディスペンサーは、標準インターフェースを有する(割り当て)、この関数は最初のブロックサイズを決定し、128バイトを超える未満128バイト、第一段目のスプリッタと呼ばれています対応するフリーリストをチェックします。フリーブロックリストがあれば利用可能である調整ブロックでは使用できない場合、それは直接、使用されている、ブロックサイズは8の倍数、再度満たされた空間になります。放出され、同一の標準インターフェースの割当て解除機能ディスペンサー()第一のブロックサイズを決定し、128バイトよりも大きい、ブロック回収に対応するフリーリストを見つけるために、128未満のバイト、第一段目のスプリッタと呼ばれています。

逐語大きな柱  https://www.dazhuanlan.com/2019/08/27/5d64c84c4c428/


おすすめ

転載: www.cnblogs.com/petewell/p/11418625.html