golang slice 扩容
操作系统预分配的内存规格 byte 8 16 32 64 80 96 112…
先求出当前切片容量x,求出append追加后的容量 y
判断 x*2 和y 的关系
1
2x < y 使用y, 根据y的个数乘上切片中存储数据类型的大小,求出需要分配的内存,然后再预分配的内存规格选择一个大于的距离最近的规格,然后除以数据类型大小求出个数,即扩容后的个数
[]int x=4,y=9 ,4* 2<9, 9 *8=72, 取内存规格中的80, 80 /8 =10, 求出扩容后容量为10
2
2x>y ,判断是否个数x大于1024, 如果不大于1024, 取2x * 数据类型的大小,寻找与分配内存规格,再求出个数
[]int x =4, y=7, 4* 2 = 8 >7, 7* 8=56,取内存规格为64, 64/8=8,扩容后容量为8
如果大于1024, 先扩容 1/4,匹配内存规格,求出扩容后规格。
Map
底层采用的是hash,使用链表解决的哈希冲突
type hmap struct{
count