类的memory
2023-04-21 17:07:13 9 举报
AI智能生成
类的memory
作者其他创作
大纲/内容
占有类内存
类的基本非static对象
虚函数开销
4字节(32位)或8字节(64字节)
内存对齐开销
尤其注意对齐虚指针的情况以及数据的排布方式,单个int或char可能变为8字节
被填齐的时候不会再出现额外开销
string等STL类内部由类和指针实现,因此对齐时按照8字节
不占有类内存
static基本对象
存在静态存储区,对所有类对象共享,不绑定this
static函数
存在代码区,被所有对象共有,不绑定this
普通成员函数
存在代码区,被所有对象共有,绑定this
抽象类的继承以及内存(注意放入顺序)
基类含有一个虚指针(占类内存)和一个虚表(不占类内存)
单继承
继承单个指针,内存优先放入父类
有一个自己的虚函数表,初始存放父类的函数位置
重写同名虚函数后变更相应表位置地址
非同名虚函数会被继承,相应地址不变更
多继承
继承所有父类指针,优先逐个放入父类
继承几个抽象类就有几个虚函数表
重写时重写所有表中同名父类函数为统一的重写地址
非同名虚函数会被继承,相应地址不变更
虚继承
优先放入基类指针和直接继承父类,然后是子类对象然后基类对象(只讨论非抽象类虚拟继承)
除了多了个基类指针供传递,没有太多区别
虚基表指针指向的地址,记录了虚基表指针地址到基类数据地址的距离
菱形继承
优先放入直接基类指针和父类虚指针和对象,然后子类,最后基类对象
规则不变,是上面的综合
不建议在虚基类中定义非静态成员使用
继承的时父子的基本对象可能会相互填充使内存对齐
0 条评论
下一页