关于c++中类的大小

被sizeof坑过很多回,简单做个小结,之后可能还会被新的坑弄过来补充:

1、一般函数不占大小,不过对于含有虚函数的类。由于需要有一个指向虚函数的表vptr,所以需要增加一个指针的大小。多个虚函数仍然只需要一个表,因此其大小仍然只要增加上一个指针的大小。(指针的大小和操作系统的位数有关,在64位机上,由于每个数按8Byte来寻址,因此指针的大小是8Byte)

2、空类的大小为1

3、sizeof(struct)需要首先考虑每一个成员变量都是sizeof(自己,比如int)的倍数,不然就得补出空的。最后还得看是不是sizeof(成员变量里最大的,比如double为8)的倍数。即所谓的内存对齐

这样做的目的是如果不考虑内存对齐,那么读或写每一个成员变量就只需要1次操作,否则需要跨越区域、2次操作。

4、C语言中共用体变量(union)所占内存长度等于其中长度最长的那个成员的长度(或许有反例,暂时没发现)

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注