sizeof各タイプのサイズ、クラスのサイズについて


今日はsizeofを研究し、それぞれのタイプの大きさを復習しました.ついでに今まで分からなかった類のいくつかを明らかにしました.
 
#include <stdio.h>
enum eEnum {TXT, JPG};

class CA
{
public:
	virtual void fV(){};
protected:
private:
};
class CB
{
public:
	void f(){};
protected:
private:
};
class CC
{
public:
	void f(){};
	virtual void fV(){};
protected:
private:
};
class CD
{
public:
	static int a;
protected:
private:
};
class CE
{
public:
protected:
private:
};

int main()
{
	eEnum eA = TXT;
	char chChar = 0;
	short nShort = 0;
	int nInt = 0;
	long lLong = 0;
	float fFloat = 0;
	double dDouble = 0;
	int nSize = sizeof(eA);		//4
	nSize = sizeof(chChar);		//1
	nSize = sizeof(nShort);		//2
	nSize = sizeof(nInt);		//4
	nSize = sizeof(lLong);		//4
	nSize = sizeof(fFloat);		//4        
	nSize = sizeof(dDouble);	//8        
	CA a;
	nSize = sizeof(a);			//4        4  
	CB b;
	nSize = sizeof(b);			//1           ,     size
	CC c;
	nSize = sizeof(c);			//4        4             ,     size
	CD d;
	nSize = sizeof(d);			//1 static     size,          static  ,                 
	CE e;
	nSize = sizeof(e);			//1                         1

	return 0;
}

面白いのはクラスの部分です.

  • 一般関数は、各インスタンスが共有するのでsizeには計上されません.

  • 虚関数は、ポインタが1つあるため、4バイトのサイズを占めます.

  • 空のクラスは、何もなくても1バイトのサイズを占めます.空のクラスがインスタンス化されるときも空間を割り当てるからです.

  • static変数は、すべてのインスタンスが共有されるためsizeには計上されません.

  • メンバー変数がある場合は、一般的にこのメンバー変数のサイズを加えればいいです.