Golang
文章平均质量分 89
golang
EdmundShelby
这个作者很懒,什么都没留下…
展开
-
Golang内存分配-笔记
大对象的分配经历:mheap基数树查找、操作系统分配的过程,每个大对象都时一个特殊的span,级别为0。mcache包中含有所有大小规格的mspan,但每一种都有一个,除了上面说到的0级span以外,mcache的span都来自mcentral。除了0级mspan,每个级别的span都会有一个mcentral用于管理span链表,所有的mcentral都是一个数组,由mheap进行管理。查找时会遍历mcentral中的有空闲元素的链表和没有空闲元素的链表,去查找有没有合适的span。原创 2023-02-10 17:30:44 · 331 阅读 · 0 评论 -
go1.17 slice扩容机制源码剖析详解
go1.17 slice扩容机制源码剖析详解扩容问题按照一般的说法,执行下面的代码,扩容状态是在容量大于1024之后每次增加原来的四分之一,如下图func Int64Grow() { intSlice := make([]int64,0) lastCap,nowCap := 0,0 fmt.Printf("%10v %10v %10v \n","nowIdx","lastCap","nowCap") for i := 1 ;i < 3000 ; i++ { intSlice = a原创 2021-10-12 09:39:42 · 489 阅读 · 0 评论 -
Go 浅析interface
interface 的数据结构eface 和 iface源码:type iface struct { tab *itab data unsafe.Pointer}type eface struct { _type *_type data unsafe.Pointer}eface 表示空的 interface{},它用两个机器字长表示,第一个字 _type 是指向实际类型描述的指针,第二个字 data 代表数据指针。iface 表示至少带有一个函数的 interface,原创 2021-09-12 11:36:36 · 293 阅读 · 0 评论