データサイズ

データサイズが2倍になればコピーのコストも2倍になると単純に考えているが,実際のところどうなのだろう。実はコンパイルしたときにどういうバイナリをはくのかあんまり知らない。以前,どこぞの本でメンバ変数なしのクラスも,識別のために若干のサイズを食うっていうはなしを聞いたことがあったが,ふつうのクラスはどうなんだろう。あと,前から気になっていたbitsetはどうなっているんだろう。

#include 
#include 
using namespace std;

class SmallClass {
private:
  int t;
};

class EmptyClass {};

int main()
{
  cout << "Small(int member only): " << sizeof(SmallClass) << endl;
  cout << "Empty(no member): " << sizeof(EmptyClass) << endl;
  cout << "int: " << sizeof(int) << endl;
  cout << "unsigned int: " << sizeof(unsigned int) << endl;
  cout << "long: " << sizeof(long) << endl;
  cout << "long long: " << sizeof(long long) << endl;
  cout << "bitset<1>: " << sizeof(bitset<1>) << endl;
  cout << "bitset<8>: " << sizeof(bitset<8>) << endl;
  cout << "bitset<64>: " << sizeof(bitset<64>) << endl;
}
$ g++ classsizetest.cc
$ ./a
Small(int member only): 4
Empty(no member): 1
int: 4
unsigned int: 4
long: 4
long long: 8
bitset<1>: 4
bitset<8>: 4
bitset<64>: 8

まぁ,だいたい予想どおり。clも同じ結果。bitsetはunsigned longの配列あたりで実装してるんでしょうね。