Swift 方法调度

本文探讨了Swift中方法调度的机制,重点介绍了结构体方法的静态调用与类方法的V_table调用方式,并通过断点分析提供了直观的理解。
摘要由CSDN通过智能技术生成

Swift 方法调度

1.方法调度

  • 结构体方法是静态调用(直接调用)
  • 类方法是通过V_table来调用的
     
V-Table SIL 中的表示是这样的:
1 decl ::= sil-vtable
2 sil-vtable ::= 'sil_vtable' identifier '{' sil-vtable-entry* '}'
3 sil-vtable-entry ::= sil-decl-ref ':' sil-linkage? sil-function-na
me

接下来我们通过断点来直观的看⼀下,⾸先我们需要明确⼏个指令:

 ARM64汇编指令
  blr ; 带返回的跳转指令,跳转到指令后边跟随寄存器中保存的地址
 
  mov: 将某⼀寄存器的值复制到另⼀寄存器 ( 只能⽤于寄存器与寄存器或者寄存器 与常量之
间传值,不能⽤于内存地址 ) ,如 : mov x1, x0 将寄存器 x0 的值复制到寄存器 x1
 
ldr: 将内存中的值读取到寄存器中,如 : ldr x0, [x1, x2] 将寄存器 x1 和寄存器 x2 相加作为地址,取该内存
地址的值放⼊寄存器 x0
 
str : 将寄存器中的值写⼊到内存中,如 : str x0, [x0, x8] , 将寄存器 x0 的值保存到内存 [x0 + x8]
 
bl: 跳转到某地址

 

函数声明位置的不同也会导致派发⽅式的不同。如果我们在类的扩展中声明的函数,这⾥就是⼀个直接调
⽤。
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值