C++编程笔记:C++用new与不用new创建对象的区别( 三 )

而如果是虚函数就会占用空间了 。

结果是占用12 byte的大小 。

这种的差别是由于c++的类所有的虚函数都是由一个虚函数指针所管理 , 它的虚函数被放在别的内存空间中管理 。 而普通函数是由this指针所管理 , this指针并不是对象本身的一部分 , 所以不会影响到sizeof的结果 。

2.2 一些有趣的现象

(1)空类的sizeof为1

(2)只有一个char的类的大小为1

(3)当有一个为char , 另一个是虚函数或者int类型成员变量 , 会出现对齐现象 , 大小为8 。 对齐现象很有意思 , 它的规则是:以最长的变量长度为对齐长度 。

long long为8 byte , 所以总共占用16 byte 。

在分析完各种情况之后 , 只有第一个的结果显得特别诡异 , 为什么空类的大小不是0 , 而是1?

推荐阅读