butry

OC和C/C++

1.object-c的本质:

object-c代码底层实现都是c、c++代码,整体流程是:

object-c -> c/c++ -> 汇编 -> 机器语言

即object-c的面向对象都是基于c、c++的数据结构实现的,oc的类、对象实质上就是c、c++的结构体

struct NSObject_IMPL {

    Class isa;

}

typedef struct objc_class *Class;

Class是一个指向结构体的指针,指针所占内存大小根据cpu位数确定,如果是64位则占用8字节,如果是32位则占用4字节。实际分配了16个字节,但是只占用了8个字节。即一个NSObject对象占用了16个字节的内存,其中8个字节是空出来的

alloc本质调用的是_objc_rootAllocWithZone,最底层调用calloc,里面规定最小分配内存为16字节,core Function硬性规定为16个字节,为了框架服务

内存对齐:一个结构体所占内存的大小是该结构体最大成员变量所占内存大小的倍数,ios系统也有自己的内存对齐,每个对象所占内存的大小是16的倍数,主要目的是提高cpu读取速度优化内存的空间分配。




评论