//go:noinline
func test(x int) (int, int)
func main()
$ go build && go tool objdump -s "main\.main" test
函式提供多返回值。多返回值在語法上接近於 python,在實現上方式上不一樣。python 多返回值實際上打包成乙個元組返回,在語法上展開,元組是單個物件。go 語言的確返回兩個返回值,我們需要分配兩個返回值區域記憶體。
呼叫call main.test
的時候,100引數進去move $0x64, 0(sp)
,接下來分別從0x8(sp)
和0x10(sp)
取了兩次的資料,分別儲存到0x20(sp)
和0x18(sp)
。所以函式有多個返回值,呼叫的時候,首先引數是 100,兩個空間用來儲存兩個返回值。
//go:noinline
func test() (x int)
$ go build && go tool objdump -s "main\.test" test
記憶體同樣由呼叫者分配,但被當作區域性變數。命名返回值和引數非常類似,命名返回值
函式返回值
這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...
函式返回值
一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?其實,只要遵守一句話即可 函式不能返回指向棧記憶體的指標!為什麼?因...
函式返回值
現實生活中的場景 我給兒子10塊錢,讓他給我買包菸。這個例子中,10塊錢是我給兒子的,就相當於呼叫函式時傳遞到引數,讓兒子買菸這個事情最終的目標是,讓他把煙給你帶回來然後給你對麼,此時煙就是返回值 開發中的場景 定義了乙個函式,完成了獲取室內溫度,想一想是不是應該把這個結果給呼叫者,只有呼叫者擁有了...