go語言中,值類型的形參不會占用額外內存,而引用類型的形參會占用指向堆中實際數據的指針的大小。
Go 語言中形參是否占用內存
在 Go 語言中,形參是傳遞給函數的參數。對于值類型(int、float、string),形參存儲在函數的棧幀中。對于引用類型(slice、map、channel),形參存儲在函數棧幀中指向堆中實際數據的指針。
是否占用內存
形參是否占用內存取決于參數傳遞機制。Go 語言采用值傳遞機制,即形參是實參的副本。因此,值類型的形參不會占用額外的內存,而引用類型的形參會占用指向堆中實際數據的指針的大小。
實戰案例:
以下代碼演示了值類型和引用類型的形參內存占用情況:
package main import "fmt" func main() { // 值類型 var a int = 100 b := a // 賦值,b 是 a 的副本 // 引用類型 slice := []int{1, 2, 3} slc := slice // 賦值,slc 是 slice 的指針副本 fmt.Printf("a: %d (棧)\n", a) fmt.Printf("b: %d (棧)\n", b) fmt.Printf("slice: %p (堆)\n", &slice) fmt.Printf("slc: %p (棧)\n", &slc) }
登錄后復制
輸出結果:
a: 100 (棧) b: 100 (棧) slice: 0xc0000a8040 (堆) slc: 0xc0000a8038 (棧)
登錄后復制
從輸出結果可以看出,值類型形參 b 存儲在棧中,占用 4 字節的內存。引用類型形參 slc 也存儲在棧中,占用 8 字節的內存,指向堆中實際數據的指針。