go build -gcflags '-m -m' x.gox:=1
for i:=1;i<100;i++{
	tmp := t{}
}
return

相比于

var tmp t
for i:=1;i<100;i++{
	tmp = t{}
}
return

差别其实不大,不过写成第二种方式依然是最干炼的。

但是在无法预估for 或者递归的深度时,如果深度很大,循环了千万次,依然是重点推荐第二种方法,虽然函数return后释放该函数在栈上开辟的变量,但是降低了爆栈的风险。

4.有人说函数返回时,内部的一些临时变量会被回收.有两个点。首先,golang 回收只发生在gc,函数结束时,只是标记一下,内存消耗依旧保留,不良的书写习惯造成高内耗,又增加gc频率,也就是stop world时间,非常的不值,贴一下两种写法的mem.rof 情况
对map插入十万条数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
差距还是蛮大的
最后pprof的链接,可以看一下这里
gc,cpu,heap,escape,服务器优化