内置类型的底层数据结构

[toc]

<font size=6>golang内置类型的底层数据结构

<font size=5>slice切片 </font>

//[]int16
type = struct []int16 {
    int16 *array;
    int len;
    int cap;

//[]byte
type = struct []uint8 {
    uint8 *array;
    int len;
    int cap;
}
  • slice中 array 是一个指针,它指向的是一个Array
  • len 代表的是这个slice中的元素长度
  • cap 是slice的容量

<font size=4>特性</font>

slice的Array存储在连续内存上:

  1. 随机访问很快,适合用下标访问,缓存命中率会高。
  2. 动态扩容时会涉及到内存拷贝和开辟新内存,会带来gc压力、内存碎片化。
  3. 如果知道所需空间,提前分配cap是很好的。
  4. 新、老 slice 共用底层数组,对底层数组的更改都会影响到彼此。
  5. append可以掰断新老slice共用底层数组的关系。(不理解?可以参考扩容原理)

<font size=5>string字符串</font>

//string
type = struct string {
    uint8 *str;
    int len;
}

<font size=5>map</font>

//map[int16]byte
type = struct hash<int16, uint8> {
    int count;
    uint8 flags;
    uint8 B;
    uint16 noverflow;
    uint32 hash0;
    struct bucket<int16, uint8> *buckets;
    struct bucket<int16, uint8> *oldbuckets;
    uintptr nevacuate;
    runtime.mapextra *extra;
} *

<font size=5>interface接口类型</font>

//interface
type = struct runtime.eface {
    runtime._type *_type;
    void *data;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Part1 - Algo:[LeetCode 23] 问题描述 Merge k sorted linked lis...
    长颈猴阅读 377评论 0 0
  • 原文地址:深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特...
    EDDYCJY阅读 1,386评论 0 12
  • 线性结构是计算机最常用的数据结构之一。无论是数组(arrary)还是链表(list),在编程中不可或缺。golan...
    _二少爷阅读 6,798评论 5 13
  • Go 语言中,slice表示一个拥有相同类型元素的可变长度序列。slice通常被写为[]T,其中元素的类型都是T;...
    副班长国伟阅读 1,732评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,819评论 1 32

友情链接更多精彩内容