Runtime objc4-723 Tagged Pointer & 对象初始化流程

Posted Jsen_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Runtime objc4-723 Tagged Pointer & 对象初始化流程相关的知识,希望对你有一定的参考价值。

Runtime objc4-723 Tagged Pointer & 对象初始化流程

Tagged Pointer

传统意义上,指针的值制式一个内存地址,它本身并没有什么意义,但是在Apple用了64位的系统后,一个指针就会有8个字节 64位,这么长的内容只表示一个地址是很浪费的。

所以为了优化这个问题,Tagged Pointer概念被提出来,它的出现让一个指针的值富有了非地址之外的其他内容,举个例子:

NSNumber *number1 = @1;
NSNumber *number2 = @3;
NSNumber *number3 = @54;


 (lldb) p number1
(__NSCFNumber *) $3 = 0xb000000000000012 (int)1 (lldb) p number2
(__NSCFNumber *) $4 = 0xb000000000000032 (int)3 (lldb) p number3
(__NSCFNumber *) $5 = 0xb000000000000362 (int)54

指针0xb000000000000012去除前边的0xb 和 后边的1 用16进制表达就是2
可以看出,指针的字面量值就是变量表示的实际值。

这样的操作让很多对象的创建可以忽略,省去malloc free的过程,极大地提升了效率

isa_t

 struct 
	uintptr_t nonpointer
	uintptr_t has_assoc
	uintptr_t has_cxx_dtor
	uintptr_t shiftcls
	uintptr_t magic
	uintptr_t weakly_referenced : 1; uintptr_t deallocating : 1; uintptr_t has_sidetable_rc : 1;	
	uintptr_t extra_rc : 19;
;

这是isa_t的结构体声明

对象初始化流程

待完成

以上是关于Runtime objc4-723 Tagged Pointer & 对象初始化流程的主要内容,如果未能解决你的问题,请参考以下文章

Tagged Pointer

javascript tagged_template_literals

交换机tagged与untagged的关系深入探讨

javascript tagged_template_literals.js

未找到带有参数 '('',)' 的 'tagged' 的反向操作。尝试了 1 种模式:['^tag/(?P<slug>[-\w]+)/$']

从一个例子来看Tagged Pointer特性