版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/zsy619/article/details/70339670
查看tidb源代码:::util/charset/charset.go,下面有段代码:
// GetAllCharsets gets all charset descriptions in the local charsets.
func GetAllCharsets() []*Desc {
descs := make([]*Desc, 0, len(charsets))
// The charsetInfos is an array, so the iterate order will be stable.
for _, ci := range charsetInfos {
c, ok := charsets[ci.Name]
if !ok {
continue
}
desc := &Desc{
Name: c.Name,
DefaultCollation: c.DefaultCollation.Name,
Desc: c.Desc,
Maxlen: c.Maxlen,
}
descs = append(descs, desc)
}
return descs
}
查看append,思考一个问题,调用本方法之后,descs内存地址是否重新分配?
特做如下例子进行测试:
type Names struct {
Name string
}
mynames := make([]*Names, 0)
for i := 0; i < 10; i++ {
my := &Names{
Name: "append"}
mynames = append(mynames, my)
fmt.Println(&mynames)
}
运行结果如下:
从10次的输出结果来看,调用append内部函数,不改变内存地址,也就是不产生性能损耗。
本文深入探讨了TiDB源代码中字符集管理的实现细节,特别是getAllCharsets函数如何获取本地字符集描述。通过代码示例,作者进一步解释了append函数在切片操作中的内存地址变化情况,揭示了其内部机制对性能的影响。

2274

被折叠的 条评论
为什么被折叠?



