2013年8月7日水曜日

std::vector<bool>のメモリー消費量を簡単に示す方法

言語仕様やソースではなく、実際の処理系での挙動からstd::vector<bool>のメモリー消費量を簡単なサンプルで示したい。

①最初に考えたのは、
こんなコード。

しかしこの方法ではstd::vector<bool>のインスタンスから得られるイテレーター(cendとか)からメモリーアドレスを取得する事は出来ないし(しても意味が無い)、ついでにdataすらvoidをreturnする仕様になっているのでデータの格納領域のアドレスすら取れない・w・

②次に考えたのは、
みたいな方法を使ってプロセスの消費メモリー情報を取得するもの。しかしこの方法では、
こんな感じでプロセスがヒープから確保しているメモリーにつては反映されていないので没。

③最終手段はこういう方法、
ヒープの断片化や実行中の他のプロセスの影響を受けていない場合、という条件付きだけど、まあ綺麗に取れてくるので言い訳付きで紹介すればいいかしら…的な。

timeコマンド使うとか外部ツールと併せるなどしてメモリー消費の傾向を見る方法の方が良い気もしますが、ideoneでC++コード範囲内でどうにか簡単にstd::vector<bool>のメモリー消費量を示したいなーと。

事は、学生さんから「std::vector<bool>って本当に消費メモリー量 1[bit/element]なんですか?」みたいな質問とsizeof演算子の使い方を誤って検証しようとしているサンプルコードが送られてきたので、サンプル書きましょうかねー、という流れ。

0 件のコメント:

コメントを投稿