[[ssacontents]] *アロケーターについて [#yf430376] ** 汎用アロケーターの要件 [#g7478aeb] + メモリの使用効率が良いこと + フラグメントを最小限にすること + スレッドセーフ + そこそこの速度 速度よりも、安定性、フラグメント対策が優先 ** ゲームで使うアロケーターの要件 [#f011e2d5] + 速いこと + 使用効率がいいこと + フラグメントを起こしにくいこと + 必要に応じてスレッドセーフ 速度が最優先。フラグメント対策は、定期的にパージすることである程度無視できる。~ メモリ要件の厳しいゲームコンソールでは効率も大事 ** 汎用アロケーターの基本的なアルゴリズム [#k7ccf1e9] + 空きメモリブロックを検索し、必要とするサイズに最も近いものを選ぶ(good fit) ++ フラグメント化の抑止 ++ 使用効率の最適化 + 空きメモリブロックの検索方法で様々なアルゴリズムがある ++ ハッシュ系 --- TLSF, DLMalloc ++ 二分木系 --- スラブアロケータ(Linux,SunOS) - いずれも、アルゴリズムの基本は、Good Fit にある。 - いずれも、アルゴリズムの基本は、Good Fitと効率(無駄の排除)にある。 - 必要とする領域に最も近い空きエリアを如何にして効率よく検索するかというテーマ。 ** OreOreアロケター [#c1b7a5af] - 総合的な性能で既存のアロケーターと競う気はない - 何かを犠牲にすれば、既存のアロケーターより性能がでるはず - 犠牲にするもの ++ 広大な範囲で使われた場合(アロケーション数が数千のオーダー)での効率とフラグメント ++ Goot Fit ++ 使用効率 ++ スレッドセーフは後回し *** 基本アルゴリズム [#r3addb2d] ** 参考資料 [#fbc70b12] - DLMalloc http://g.oswego.edu/dl/html/malloc.html