<分区>
package main
import (
"fmt"
"os"
)
func main() {
var l = test(4)
test(5)
fmt.Fprintf(os.Stdout, "%d\n", *l)
}
func test(v int) *int {
var p = v
return &p
}
在 C 中,等效代码将打印 5,因为第一个堆栈帧中的变量 p 将被第二个堆栈帧中的相同变量 p 覆盖。我反汇编了代码,但无法理解它。
#include <stdio.h>
int* test(int v);
int main() {
int* p = test(4);
test(5);
printf("%d\n", *p);
}
int* test(int v) {
int p = v;
return &p;
}
有人能给我一个关于内存管理在 Go 中如何工作的基本概要吗?函数变量会放在堆上吗?