Go学习笔记-Slice底层实现原理

简介: Go学习笔记-Slice底层实现原理

1、slice结构体

type slice struct {
    array unsafe.Pointer    // 底层数组指针,真正存放数据的地方
    len   int                // 切片长度,通过 len(slice) 返回
    cap   int                // 切片容量,通过 cap(slice) 返回
}

2、slice初始化

  • make:会直接给底层数组分配内存,指定长度和容量,超出长度范围的不能访问

  • new:不会立马给底层数组分配内存,返回的是底层数组起始地址

3、slice扩容机制

  • 当cap不够时,append会触发扩容
  • len < 1024,扩容cap直接翻倍
  • len >= 1024,扩容1/4

4、slice内存分配

  • 内存分配不是按照cap扩容变化的
  • go底层有内存管理模块,负责分配一定规模大小内存块(如8byte、16byte、32byte、48byte等)
  • 当slice的cap变大时,内存分配是按照满足内存需求最小且最接近所需内存


相关文章
|
3月前
|
分布式计算 安全 Java
简单易懂的 Go 泛型使用和实现原理介绍
简单易懂的 Go 泛型使用和实现原理介绍
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
2月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
3月前
|
人工智能 Go
go slice 扩容实现
go slice 扩容实现
52 3
|
3月前
|
人工智能 编译器 Go
go slice 基本用法
go slice 基本用法
52 1
|
2月前
|
人工智能 算法 搜索推荐
Go学习笔记-代码调
近年来,人工智能技术飞速发展,Cody作为由Sourcegraph开发的一款AI驱动编码助手,应运而生。它不仅提供代码预测与补全,还能深度理解代码上下文,为开发者提供准确建议,提升编码效率和质量。Cody能识别潜在错误并提出修复建议,缩短调试时间,同时进行智能代码审查,帮助优化代码结构和风格。未来,随着AI技术进步,Cody将不断学习优化,成为开发者不可或缺的伙伴,推动编程领域的创新与发展。
33 0
|
3月前
|
存储 算法 Go
|
3月前
|
存储 人工智能 JSON
深入理解 go reflect - 反射基本原理
深入理解 go reflect - 反射基本原理
54 0
|
11天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
31 2
|
10天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
20 2