C++类对象所占的内存空间

2020-03-09 13:31:29 浏览数 (1)

       对于一个什么都没有定义的空类来说,它的大小不是0,而是1,因为实例化对象会获得一个独一无二的地址,也是为了区别该类的不同对象。在深度探索C 对象模型中是这样说的:那是被编译器插进去的一个char,使得这个class的不同实体(object)在内存中配置独一无二的地址。也就是说这个char是用来标识类的不同对象的。

       如果在类中定义成员函数(包括静态成员函数),不占用类对象的内存空间。即每个类都只有一个,如有多个对象去共享这一个成员函数。成员变量会占用类对象的内存空间,即每个对象都有一份成员变量,但是静态成员变量不占对象的内存。

       对于虚函数来说,是基于类的,每创建一个虚函数,在类中就会产生一个指向虚函数地址的指针,那么这些指针就存放在一个表里,这个表就被称为虚函数表(virtual table[vrbl])。虚函数表一般保存在可执行文件中,当程序运行时载入到内存中。

       对于有虚函数的对象来说,只要类中包含有虚函数(无论是1个还是多个),那么对于对象来说都额外占用4个字节的内存。原因就是因为系统在对象中添加了一个指向虚函数表的指针,通常叫做vptr。

       内存字节对齐的目的是为了提高访问速度。

0 人点赞