32位和64位操作系统各类型sizeof大小
1) 32位操作系统
2) 64位操作系统
3) 常见的类型sizeof大小
空类:
C++编译器强制给这种类插入一个缺省成员,长度为1;
如果有自定义的变量,变量将取代这个缺省成员。
class A
{
};
cout<<sizeof(A); // 输出1
只有一个char型
class A
{
char c;
};
cout<<sizeof(A); // 输出1
有5个char型
class A
{
char a,b,c,d,e;
};
cout<<sizeof(A); // 输出5
一个char型 + 一个int型:字节对齐
class A
{
char c;
int a;
};
cout<<sizeof(A); // 输出8
2个char型 + 一个int型
class A
{
char c,d;
int a;
};
cout<<sizeof(A); // 输出8
5个char型 + 一个int型
class A
{
char c,d,e,f,g;
int a;
};
cout<<sizeof(A); // 输出12
1个char型 + 1个int型 + 2个char型
class A
{
char c;
int a;
char d,e;
};
cout<<sizeof(A); // 输出12
普通函数不占空间
class A
{
void B(){ int d; }// 0Byte
int C(){};
};
cout<<sizeof(A); // 输出1,等同于空类
虚函数 占4个字节:指向虚函数表的指针
class A
{
virtual void C(){}
};
cout<<sizeof(A); // 输出4
多个虚函数等同于1个虚函数
class A
{
virtual void C(){}
virtual void D(){}
};
cout<<sizeof(A); //输出4
多继承问题中sizeof
class b{};
class c :public b
{
virtual void fun() = 0;
};
class d :public b ,public c{};
cout<<sizeof(d); // 输出8,字节对齐(b+c)
单继承问题中sizeof
class b{};
class c :public b
{
virtual void fun() = 0;
};
class d :public c{};
cout<<sizeof(c); //输出4
cout<<sizeof(d); //输出4
静态数据成员 和 成员函数 不占空间
class A
{
static int a;
static int b(){};
};
cout<<sizeof(A); //输出1
const数据变量占空间 和 const成员函数不占空间
class A
{
public:
const int b;
const int c;
virtual void f(){}
int d() const{}
int e() const{}
virtual void g(){}
};
cout<<sizeof(A); // 输出12= 4+4+4(多个虚函数算一个)
4) 总结
- 不占空间的有:普通函数,静态数据成员,静态成员函数;
- 无论多少个,只相当于一个所占的空间:虚函数;
- 空类占1个字节;
- 既有字符型又有整型,要考虑字节对齐;
- 普通数据成员、const数据成员占空间;静态成员不占空间。