ランタイムobjc4-723タグ付きポインター&オブジェクトの初期化プロセス

ランタイムobjc4-723タグ付きポインター&オブジェクトの初期化プロセス

タグ付きのポインタ

伝統的に、64ビットシステムで標準意味を成さない自体のメモリアドレスへのポインタの値が、Appleの後には、ポインタは限りコンテンツは、1つのアドレスだけを表し、8 64ビットバイトがあるでしょうそれは無駄です。

したがって、この問題を最適化するために、タグ付きポインタという概念が提唱された、それは例えば非アドレス以外のリッチコンテンツへのポインタの値に表示されます。

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進表現が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構造体の宣言

オブジェクトの初期化プロセス

保留中

公開された139元の記事 ウォン称賛35 ビュー410 000 +

おすすめ

転載: blog.csdn.net/wxs0124/article/details/87981402