#102 Go 官方标准编译器中实现的优化集锦汇总
#102 Go 官方标准编译器中实现的优化集锦汇总
参考于:
1. Go 101项目:https://github.com/golang101/golang101
2. Go 101官网:https://gfw.go101.org
3. Go 101公众号
夜读分享的视频地址是:https://www.bilibili.com/video/BV1YZ4y1K7w2
我们应该知道的官方标准 Go编译器中做出的一些优化:
不同的 go 编译器与go版本之间可能存在一定的差别,另外 windows 与 linux 可能存在一定的区别。
字符串和字节切片之间的转换 一般情况下,这样的转化需要复制一份底层的字节序列。但是gc编译器做了 一些优化,使得下面这些情况下的这样的转化无需复制底层的字节序列:
1. 紧跟range关键字的从字符串到字节切片的转换;
2. 映射元素读取索引语法中被用做键值的从字节切片到字符串的转换;
3. 字符串比较表达式中被用做比较值的从字节切片到字符串的转换;
4. (至少有一个被衔接的字符串值为非空字符串常量的)字符串衔接表达 式中的从字节切片到字符串的转换。
优化 1:紧跟range关键字的从字符串到字节切片的转换
优化 2:映射元素读取索引语法中被用做键值的从字节切片到字符串的转换
优化 3:一个字符串比较表达式中被用做比较值的从字节切片到字符串的转换
优化 4:含非空字符串常量的字符串衔接表达式中的从字节切片到字符串的转换
优化 5:[]rune(aString)转换的时间和空间复杂度都是 O(n),但是 len([]rune(aString)) 中的此转换不需开辟内存
优化 6:字符串衔接表达式只需开辟一次内存,无论需要衔接多少个字符串
优化 7:for i := range anArrayOrSlice {anArrayOrSlice[i] = zeroElement}形式将被优化为 一个内部的memclr操作
优化 8:for k = range m {delete(m, k)}形式将被优化为一个内部的map清空操作
优化 9:尺寸不大于4个原生字(即int)并且字段数不超过4个的结构体值被视为是小尺寸值
优化 10:接口值包裹指针值比包裹其它类型的值要快
优化11:接口值包裹指针值比包裹其它类型的值要快 ,因为少开辟一次内存
优化12:接口值包裹0-255的整数也很快
优化12:Bounds Check Elimination
到此这篇关于“#102 Go 官方标准编译器中实现的优化集锦汇总”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
#102 Go 官方标准编译器中实现的优化集锦汇总
Go 笔记之 Go 命令快速体验
Go 语言十年而立,Go2 蓄势待发
Go 语言编译过程概述
【后端教程】走进Golang之编译器原理
小米技术出品——走进Golang之编译器原理
编程中文书集合
golang 没有名字参数_golang内核系列--深入理解plan9汇编&实践
龙芯平台构建Go语言环境指南
Go语言的几大优势和特性