请教个32位和64位 slice append的问题

lyfhallelujah · · 392 次点击
64除以32是不是2 ?
#1
更多评论
看了一下源代码,cap<1024的默认情况下,slice扩容是原来容量的翻倍,翻倍后的内存向上补齐到{0, 8, 16, 32, 48, 64, 80, 96, 112, 128,...}大小,GO的GC内内存池好像是按这些大小分配的。 64位时,int的长度为8,所以(5*2)*8=80,刚好落在补齐数组内,所以长度为10 32位是,int的长度为4,所以(5*2)*4=40,需要向上补齐到48,所以长度调整为12*4=48 growslice函数中调用了roundupsize函数,此函数处理内存补齐 growslice源码参见https://github.com/golang/go/blob/master/src/runtime/slice.go roundupsize源码参见https://github.com/golang/go/blob/master/src/runtime/msize.go
#2