忆梦|我擦~字符串转字节切片后,切片的容量竟然千奇百怪( 四 )
我们分析这块代码发现,go编译器在将字符串转字节切片生成AST时 , 总共分为三步 。
- 先判断该变量是否是常量字符串,如果是常量字符串,则直接通过types.NewArray创建一个和字符串等长的数组
- 常量字符串生成的切片变量也要进行逃逸分析 , 并判断其大小是否大于函数栈允许分配给变量的最大长度 ,从而判断节点是分配在栈上还是在堆上
- 最后 , 如果字符串长度是大于0 ,将字符串内容复制到字节切片中 ,然后返回 。 因此现象三中的切片容量是3也就完全清楚了
- 判断是否是常量 ,如果是常量则转换为等容量等长的字节切片
- 如果是变量 ,先判断生成的切片是否发生变量逃逸
- 如果逃逸或者字符串长度>32 ,则根据字符串长度可以计算出不同的容量
- 如果未逃逸且字符串长度<=32, 则字符切片容量为32
- 函数返回局部指针
- 栈空间不足逃逸
- 动态类型逃逸, 很多函数参数为interface类型 , 比如fmt.Println(a ...interface{}) , 编译期间很难确定其参数的具体类型, 也会发生逃逸
- 闭包引用对象逃逸
【忆梦|我擦~字符串转字节切片后,切片的容量竟然千奇百怪】生命不息 ,探索不止 ,后续将持续更新有关于go的技术探索
推荐阅读
- 忆梦|电视接口都有哪些?各自有哪些作用?智能电视常见接口解析来了
- 忆梦|刘强东:电商没有制造就业,反而造成大量失业?真是这样吗?
- 忆梦|在国外火爆粒子漩涡壁纸来了,满满的科技感,赶紧来试试吧
- 忆梦|从iPhone11 Pro换成华为,憋了一肚心里话,不吐不快
- 忆梦|利用Sharding-JDBC解决数据库读写分离查询延时问题
- 忆梦|智云发布SMOOTH-XS手机云台,光是这颜色就爱了
- 忆梦|麒麟芯片成绝唱?华为手机全线涨价,最高涨 3000 元
- 忆梦|全县累计开通5G基站10个
- 忆梦|SpaceX和亚马逊正争夺参与定制FCC卫星规则的主导权
- 忆梦|称霸5G?做梦!被美国盯上重罚70亿,华为直接躺赢?
