sizeof 32位和64位操作系统的区别

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数据成员占空间;静态成员不占空间。

猜你喜欢

转载自blog.csdn.net/QIJINGBO123/article/details/88233164