s:=[]byte("")fmt.Println(cap(s))//32buts:=[]byte("")fmt.Println(cap(s))//0fmt.Println(s)Isthecompilerdoessomeoptimizations?
2 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
这个问题很有意思,从结果上来看,编译器肯定是对栈上分配的临时数组变量做了优化(临时分配的固定大小的容量),若一但操作了该数组变量,那么会根据实际使用情况更新数组变量的容量大小。此外,如果是将该数组定义成包内部变量或者全局变量,这个cap的结果也会是0,因为它会在堆上进行分配。我也仅仅是根据测试结果进行的猜测,具体内部实现细节可能需要大牛来科普以下。
添加回答
举报
0/150
提交
取消