类型内存模型(对象内存模型)
类型的内存模型的3个问题:
1、包含什么:附加信息
2、怎么布局:内存对齐
3、使用场景:怎么使用附加信息
一、包含什么?
除了包含结构类型的显式成员变量外,类型内存模型需要解决附加信息的引入问题
1、附加信息(Opaque)有哪些:
类型信息、函数信息、继承信息、内存计数等;
2、为什么有附加信息:
1)解决多态问题;
2)解决类型运行时信息问题;
3)解决类型的运行时内存管理问题(引用计数)。
3、附加信息怎么包含进去:三个方案:
1)类型本身隐式自带(Opaque成员);
2)编译器定制处理:编译器针对类型引入(c++的虚函数表);
3)编译器引入中间容器类型:swift的存在容器;
二、怎么布局:
详见内存布局;
三、怎么使用:
1、多态机制:
函数的调用解释:
1)虚函数表的查找、绑定与调用;
2)类型信息的查找与使用
2、内存模型的内存自管理:
引用计数;
3、容器中间类型的使用:
编译器实现,开发者不可见;类型的打包、解包
4、运行时类型信息:
开发者调用类型信息接口获取;
我思故我在