栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Go禁止使用(&)映射成员的地址,却允许(&)slice元素?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Go禁止使用(&)映射成员的地址,却允许(&)slice元素?

切片和贴图之间的主要区别在于:切片由后备数组支持,而贴图则没有。

如果地图增大或缩小,则指向地图元素的潜在指针可能会变成指向任何地方(未初始化的内存)的悬空指针。这里的问题不是“用户困惑”,而是它会破坏Go的主要设计元素:没有悬空的指针。

如果切片用完了容量,则会创建一个新的更大的后备阵列,并将旧的后备阵列复制到新的后备阵列中。并且旧的支持阵列 仍然 存在
。因此,从指向原始支持数组的“未成年人”切片中获得的任何指针仍然是指向有效内存的有效指针。

如果您有一个切片仍指向旧的支持阵列(例如,因为在将切片增长到超出其容量之前已复制了该切片),您仍将访问旧的支持阵列。这与切片元素的指针关系不大,但是切片是视图到数组中,并且数组在切片增长期间被复制。

注意,在切片收缩期间没有“减少切片的衬背阵列”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/471071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号