MST

星途 面试题库

面试题:Go语言切片底层内存布局之容量增长机制

在Go语言中,当切片的容量不足以容纳新的元素时,其容量增长遵循怎样的规则?请举例说明不同初始容量下切片容量增长的具体过程。
26.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,当切片的容量不足以容纳新的元素时,其容量增长遵循以下规则:

  1. 如果当前切片的容量小于1024,那么新的容量会翻倍。
  2. 如果当前切片的容量大于或等于1024,那么新的容量会增加当前容量的1/4。

以下是不同初始容量下切片容量增长的具体过程示例:

初始容量小于1024

package main

import (
    "fmt"
)

func main() {
    // 初始容量为5
    s := make([]int, 0, 5)

    // 添加元素,容量增长情况
    for i := 0; i < 15; i++ {
        s = append(s, i)
        fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
    }
}

在上述示例中,初始容量为5,添加第6个元素时,容量翻倍为10;添加第11个元素时,容量再次翻倍为20。

初始容量大于或等于1024

package main

import (
    "fmt"
)

func main() {
    // 初始容量为1024
    s := make([]int, 0, 1024)

    // 添加元素,容量增长情况
    for i := 0; i < 1300; i++ {
        s = append(s, i)
        fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
    }
}

在这个示例中,初始容量为1024,添加第1025个元素时,容量增加1/4,变为1280(1024 + 1024/4)。