Java中的变量都是放在内存中的,安卓为了提升性能,变量都是放在寄存器中的。寄存器为32位,能够支持任何类型。其中long和double这种64为的类型须要两个寄存器保存。寄存器采用v和p来命名,v表示本地寄存器,p表示参数寄存器,关系以下: v0:第一个本地寄存器java
v1:第二个本地寄存器函数
v2 p0(this)性能
v3 p1 第一个参数this
固然,若是是静态方法,就只有5个寄存器,不须要存this。code
.registers使用这个指令指定方法中寄存器的总数对象
.locals使用这个指令指定方法中非参寄存器总数,放在方法第一行。内存
.field private isFlag:z #定义变量 .methd #方法 .parameter #方法参数 .prologue #方法开始 .line 12 #此方法位于第12行 invoke-direct #调用函数 return-void #返回void
.end method #函数结束 new-instence #建立实例 input-object #对象赋值 iget-object #调用对象 invoke-static #调用静态函数
private static int sum(int a, int b) { return a+b; }
对应的smali代码:get
.method private static sum(II)I .locals 4 #表示须要申请4个本地寄存器 .parameter .parameter #这里表示有两个参数 .prologue .line 27 move v0, p0 .local v0, a:I move v1, p1 .local v1, b:I move v2, v0 move v3, v1 add-int/2addr v2, v3 move v0, v2 # .end local v0 return v0 # .end method