面试题答案
一键面试- 小容量情况(小于1024):
- 当切片的容量小于1024时,如果容量不足,新的容量会直接翻倍。
- 例如,初始切片
a := make([]int, 0, 5)
,当需要扩容时,新的容量将变为10。
- 大容量情况(大于等于1024):
- 当切片的容量大于或等于1024时,每次扩容会增加原容量的1/4。
- 比如,初始切片
b := make([]int, 0, 1024)
,当需要扩容时,新的容量将变为1024 + 1024/4 = 1280
。
- 底层实现细节:
- Go语言的切片扩容是在运行时根据实际情况动态进行的。
- 扩容时会重新分配内存,将原切片的数据复制到新的内存空间,然后更新切片的指针和容量等信息。
- 这种扩容策略在一定程度上平衡了内存使用和性能,避免频繁的内存分配和复制操作。