動的確保を一切使わない STL 互換コンテナ
MMU の存在しないハードウェアに対してのプログラム ( 多くの場合、組み込み系のプログラム ) においては、メモリの断片化が現在においても問題です。頻繁に動的確保を行う STL コンテナの利用は組み込み分野では倦厭されます。僕は、この問題に対して、様々なアプローチを試みてみたものに一人なのですが、今回、考え方を 180°変えてみることにしました。時代の流れ逆行し、動的確保を一切使わない STL 互換コンテナを作ってみることにしました。それが、今回ご紹介する static_container です。仮想関数などもで極力使用していないため、vector, string はそのままバイナリファイルに書き出し、読み込むことが可能です(なんせ、中身は全部ただの配列ですから)。
用途としては、こんなのが考えられます。
- あらかじめ割り振られた領域を STL コンテナとして便利に利用
- 領域サイズを後から変更可能
- string をファイルヘッダとして利用
- ファイルを表す識別子(拡張子)等を文字数制限つきでヘッダに埋め込みたい場合
- 素直に char[] の代替品として...
【static_container::vector の 例】
#includeusing namespace static_container; vector< int, 10 > c; // int のベクター ( 最大サイズ 10 ) c.max_size(); // = 10 c.size(); // = 0 c.push_back( 5 ); // 5 を末尾に挿入 c.size(); // = 1 c.pop_back(); // 削除 c.size(); // = 0
他に、
- list
- hash
- string
があります。
【ダウンロード】
(2004/4/20 修正)
以下の URL から、
http://proxy.ymdb.yahoofs.jp/users/f92ebc28/bc/static_container/2004-4-19.zip?bc5TZ1ABEAU69bl4
2004-4-19.zip を落としてもらうと、読めるはず!!!