切片和贴图之间的主要区别在于:切片由后备数组支持,而贴图则没有。
如果地图增大或缩小,则指向地图元素的潜在指针可能会变成指向任何地方(未初始化的内存)的悬空指针。这里的问题不是“用户困惑”,而是它会破坏Go的主要设计元素:没有悬空的指针。
如果切片用完了容量,则会创建一个新的更大的后备阵列,并将旧的后备阵列复制到新的后备阵列中。并且旧的支持阵列 仍然 存在
。因此,从指向原始支持数组的“未成年人”切片中获得的任何指针仍然是指向有效内存的有效指针。
如果您有一个切片仍指向旧的支持阵列(例如,因为在将切片增长到超出其容量之前已复制了该切片),您仍将访问旧的支持阵列。这与切片元素的指针关系不大,但是切片是视图到数组中,并且数组在切片增长期间被复制。
注意,在切片收缩期间没有“减少切片的衬背阵列”。



