Untitled
Go技能slice底层数据结构12345type slice struct { array unsafe.Pointer //指向底层数组的指针,占用8个字节
len int //切片的长度,占用8个字节 cap int //切片的容量,占用8个字节}
底层使用runtime.makeslice计算slice所需内存的大小,然后调用mallocgc进行内存分配。
slice深拷贝和浅拷贝深拷贝:拷贝数据本身,创建一个新对象,分配新的内存空间。1、copy(slice2,slice1),2、append赋值发生扩容时。浅拷贝:拷贝数据地址,新对象于旧对象的内存地址相同,修改值时对互相都会有影响。slice2
:= slice1
slice的扩容机制1、预估容量:新申请的容量大于旧容量的2倍,那么扩容后的大小就为新申请的容量;旧容量小于1024,那么新容量就为旧容量的2倍;如果旧容量大于1024,那么新容量就为旧容量的1.25呗。2、计算申请内存,内存=预估容量
* 元素类型大小,go向自身的内存管理管理模块只有0、8、1 ...
