go语言之路

golang slice底层

golang slice底层

此问题由以下场景展开研究:

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    a := [5]int8{1, 2, 3, 4, 5}
    fmt.Print(unsafe.Sizeof(a)) //5
    s := []int8{1, 2, 3, 4, 5}
    fmt.Print(unsafe.Sizeof(s)) //24
}

slice底层定义

编译期间的切片是cmd/compile/internal/types.Slice 类型的,但是在运行时切片可以由如下的 reflect.SliceHeader结构体表示,其中:

  • Data 是指向数组的指针;
  • Len 是当前切片的长度;
  • Cap 是当前切片的容量,即 Data 数组的大小:
type SliceHeader struct {
   Data uintptr //8个字节
   Len  int     //8个字节
   Cap  int     //8个字节
}

docker进阶使用(编写Dockerfile)

上一篇

redis通信协议protocol

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

个人微信公众号

we-tuiguang

qq交流群

群号:1046260719

微信扫一扫

微信扫一扫