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