私は、メモリ使用量に関して可能な限り意地悪である必要があるプロジェクトに取り組んでいます。vector<bool>
例のサイズの総合計サイズを計算しようとして32
います:
vector<bool> v(32);
cout << "sizeof: " << sizeof(v) << endl;
cout << "size: " << v.size() << endl;
cout << "capacity: " << v.capacity() << endl;
cout << "max_size: " << v.max_size() << endl;
それは私に与える:
sizeof: 40 <- 40 byte? wtf?
size: 32 <- hoping an element takes up 1 bit
(instead of the usual 1 byte for booleans)
this should take around 32 bit memory
capacity: 64 <- I guess this is because minimum size is
1 integer = 64 bit
max_size: 9223372036854775744 <- relevant somehow?
私の64ビットubuntu 12.04マシンで。だから私は次のようにメモリを計算できると思った:
40 * 8 + 64 * 1 = 384 bit = 48 byte
したがって、この計算によると、ほとんどのメモリは size のベクトル オブジェクトに費やされます32
。私の質問は、なぜvector
オブジェクトがそれほど多くのメモリを使用する必要があるのですか? また、私の計算に間違いはありますか?周りのベクトルサイズに対して自分でビット単位の操作を行わずに効率を上げるにはどうすればよい32
ですか?