FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SmallObj.cppの覚書その1

http://loki-lib.sourceforge.net/html/a00671.html

00068 class Chunk
    FixedAllocatorの下位で動くクラス。FixedAllocatorはChunkを複数もつ。
    実際の確保/開放処理はFixedAllocatorからこいつに投げられる。

00078 bool Init( std::size_t blockSize, unsigned char blocks );
    引数のオーバーフローのアサートチェック、メモリの確保、Chunk::Resetの呼び出し。
    USE_NEW_TO_ALLOCATEが定義されて居た場合はnew,そうでなければstd::mallocがメモリ確保に使用される。
    戻り値は成功/不成功。メモリ確保に失敗したときのみ失敗が返る。
    newで失敗した場合は例外投げられる。キャッチするのは上位レイヤーらしい。例外オフにされてたらどうする。

00086 void * Allocate( std::size_t blockSize );
    ブロックの確保。出来ない場合はNULLが返る。フリーリストから先頭ブロックの取り出し。

00096 void Deallocate( void * p, std::size_t blockSize );
    ブロックの解放。
    渡されたブロックをフリーリストに追加するだけ。インデックスを求めるために除算が入る。

00103 void Reset( std::size_t blockSize, unsigned char blocks );
    メンバ変数の初期化、フリーリストの構築。
    各々のブロックの先頭に次のフリーブロックのインデックスを書き込む。

00106 void Release();
    Initで確保されたバッファを開放するだけ。

00117 bool IsCorrupt( unsigned char numBlocks, std::size_t blockSize, bool checkIndexes ) const;
    整合性チェック。
    想定以上のフリーブロックがないか?フリーリストの先頭インデックスが正当か?
    chunkIndexesがtrueであれば、フリーリストの連結に不整合をチェック。
    チャンク外のインデックスはあるか?2重に連結されていないか?、フリーブロックの個数はblockAvaliable_と同一か?

00126 bool IsBlockAvailable( void * p, unsigned char numBlocks, std::size_t blockSize ) const;
    渡されたブロック(p)が利用可能かどうかをチェックする。trueならば利用可。falseなら利用不可。
    フリーリスト内のものであれば利用可能と判断される。

00130 inline bool HasBlock( void * p, std::size_t chunkLength ) const
    渡されたポインタ(p)がそのチャンクから確保されたものかどうかを返す

00136 inline bool HasAvailable( unsigned char numBlocks ) const
    numBlocksのフリーブロックがあればtrue,そうでなけばfalse

00139 inline bool IsFilled( void ) const
    チャンクが満杯かどうか?フリーなブロックを持っているかどうか?
    チャンクが満杯ならばtrue、そうでなければfalse。

00143 unsigned char * pData_;
    チャンクが保持しているバッファ

00145 unsigned char firstAvailableBlock_;
    フリーリストの先頭を示すインデックス

00147 unsigned char blocksAvailable_;
    チャンク全体でのフリーブロックの数
スポンサーサイト

コメントの投稿

非公開コメント

検索フォーム
ユーザータグ

ICPC 2009 国内予選 ゲームプログラミング 

カテゴリ
最新記事
月別アーカイブ
最新コメント
最新トラックバック
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。