随笔分类 -  对象内存模型

摘要:class Human { //8 type or isa //retainCount var age: Int?//16 var name: String?//16 var nicknames: [String] = [String]() //返回指向 Human 实例头部的指针 func hea 阅读全文
posted @ 2019-04-02 16:06 zzfx 阅读(614) 评论(0) 推荐(0) 编辑
摘要:类型的内存模型的3个问题: 1、包含什么:附加信息 2、怎么布局:内存对齐 3、使用场景:怎么使用附加信息 一、包含什么? 除了包含结构类型的显式成员变量外,类型内存模型需要解决附加信息的引入问题 1、附加信息(Opaque)有哪些: 类型信息、函数信息、继承信息、内存计数等; 2、为什么有附加信息 阅读全文
posted @ 2019-03-22 17:16 zzfx 阅读(358) 评论(0) 推荐(0) 编辑
摘要:目的:保证cpu对结构体数据的存取效率; 执行:在编译器层面; 规则:成员的起始位置、结构的大小、数组中的结构等做出的约束; 参量(对齐因子):缺省按照结构体内的最大尺寸单元对齐;可以指定pack. 表现: 结构体的内存对齐形式上像一个报文; 最大尺寸的的成员变量占据报文的一行; 小尺寸的成员变量通 阅读全文
posted @ 2018-12-03 18:23 zzfx 阅读(246) 评论(0) 推荐(0) 编辑
摘要:Data structure alignment refers to the way data is arranged and accessed in computer memory. It consists of three separate but related issues: data al 阅读全文
posted @ 2018-12-03 18:11 zzfx 阅读(717) 评论(0) 推荐(0) 编辑
摘要:Memory access granularity Programmers are conditioned to think of memory as a simple array of bytes. Among C and its descendants, char* is ubiquitous 阅读全文
posted @ 2018-12-03 17:09 zzfx 阅读(1031) 评论(0) 推荐(0) 编辑
摘要:内存对齐的规则: 1、 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。 2、 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结 阅读全文
posted @ 2018-12-03 16:51 zzfx 阅读(280) 评论(0) 推荐(0) 编辑
摘要:编译器最重要的工作就是确定对象内存模型 阅读全文
posted @ 2018-06-15 15:06 zzfx 阅读(185) 评论(0) 推荐(0) 编辑
摘要:MemoryLayout 基本使用方法 HandyJSON 是 Swift 处理 JSON 数据的开源库之一,类似 JOSNModel,它可以直接将 JSON 数据转化为类实例在代码中使用。 由于 Swift 是一种静态语言,没有 OC 那种灵活的 Runtime 机制,为了达到类似 JSONMod 阅读全文
posted @ 2018-06-14 17:51 zzfx 阅读(1042) 评论(0) 推荐(0) 编辑
摘要:数组、结构体、类 三种对象模型比较: 1)三者的元素在内存中,都处在一个连续的内存块中;三者在数据结构中都属于线性结构; 11)结构体、类的对象模型大小和元素个数、元素大小及对齐方式有关。 2)数组的元素具有相同的类型;结构体和类的元素可以不通; 3)数组通过数组名、指针、下标访问;结构体和类通过对 阅读全文
posted @ 2017-02-22 15:08 zzfx 阅读(281) 评论(0) 推荐(0) 编辑
摘要:typedef struct structTest { char xchar; int xint; int yint; }xStruct; @interface ViewController () { char xchar; int xint; int yint; } xStruct xTest = 阅读全文
posted @ 2017-02-22 14:40 zzfx 阅读(232) 评论(0) 推荐(0) 编辑