计算类的大小

佚名 / 2023-04-28 / 原文

1. 对象存储规则

类实例化出的对象, 有成员变量和成员函数, 它们是存储在对象的?

实际上, 只有非静态的成员变量存储在对象中, 而成员函数是存储在公用代码段中, 如下图

现在知道了成员变量存储在对象中, 成员函数在公用代码段, 那么成员变量在内存中是如何存储的

对象中的成员变量在存储时需要遵守内存对齐的规则

下面用代码证明

#include <iostream>
using namespace std;

class obj
{
	void _print()
	{
		cout << "test" << endl;
	}
	char _ch;
	int _a;
};
int main()
{
	// 计算类 = 计算类的对象
	obj obj1;
	printf("%d\n", sizeof(obj));
	printf("%d\n", sizeof(obj1));
}

如图, 在计算类时, 只计算了类(对象)中的成员变量的大小, 因为成员函数在公用代码段

最后打印出的8证明成员变量在存储时遵守内存对齐

2. 计算空类

一个没有成员的类, 大小是多少?

如图, 结论是1字节, 空类大小为一个字节是为了占位不存储有效数据