Go
文章平均质量分 92
天易独尊
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Go内存分配(三、内存管理组件和总结)
Go语言内存分配器采用多级缓存机制,包含线程缓存(mcache)、中心缓存(mcentral)和页堆(mheap)三个层级组件。mcache为每个处理器私有,用于微对象(0-16B)和小对象(16B-32KB)的无锁分配;mcentral为全局中心缓存,提供特定大小的mspan;mheap管理大对象(>32KB)和向操作系统申请内存。基本单元mspan管理8KB页的内存块,通过67种跨度类(size class)实现高效内存分配。原创 2025-06-25 23:03:53 · 630 阅读 · 0 评论 -
Go内存分配详解(二、虚拟内存布局和地址空间)
Go语言在1.11版本前采用连续内存布局,将虚拟内存划分为spans(512MB)、bitmap(16GB)和arena(512GB)三个区域。为解决C与Go混合使用时内存冲突问题,1.11版本改为稀疏内存布局,使用二维heapArena数组管理64MB内存单元。运行时通过操作系统抽象层管理内存状态转换,支持mmap等系统调用实现跨平台内存管理。稀疏内存解决了地址冲突问题,但增加了管理复杂度。原创 2025-06-25 22:25:54 · 827 阅读 · 0 评论 -
Go内存分配详解(一、概述和设计原理)
Go语言内存管理采用TCMalloc算法实现高效分配,核心机制包括:1) 批量预申请系统内存,减少系统调用;2) 分级管理降低锁粒度;3) 对象回收时优先复用内存块,闲置过多才归还系统。内存分为栈区(编译器管理)和堆区(分配器+GC管理)。分配器采用线性分配器(指针移动式)和空闲链表两种方法,通过虚拟内存布局优化地址空间利用,实现高性能内存管理。原创 2025-06-25 22:07:05 · 987 阅读 · 0 评论 -
Golang中Bit数组的实现
Go语言实现Bit数组常用方法Go语言里的集合一般会用map[T]bool这种形式来表示,T代表元素类型。集合用map类型来表示虽然非常灵活,但我们可以以一种更好的形式来表示它。例如在数据流分析领域,集合元素通常是一个非负整数,集合会包含很多元素,并且集合会经常进行并集、交集操作,这种情况下,bit数组会比map表现更加理想。一个bit数组通常会用一个无符号数或者称之为“字”的slice来...原创 2018-05-23 12:12:49 · 2633 阅读 · 0 评论 -
Go中Map类型和Slice类型的传递
转自https://www.cnblogs.com/snowInPluto/p/7477365.html关于 Go 中 Map 类型和 Slice 类型的传递Map 类型先看例子 m1:func main() { m := make(map[int]int) mdMap(m) fmt.Println(m)}func mdMap(m map[int]int) { ...转载 2018-06-28 14:47:56 · 412 阅读 · 0 评论 -
Go语言slice基本原理
slice 的本质slice 本质上是基于数组实现的,slice 可以看作是由三个元素组成的结构体: struct slice { ptr len cap} 其中 ptr 是指向底层数组的指针, len 表示当前 slice 中元素的数量, cap 表示当前底层数组大小.我们用 make 来创建 slice 的时候, 最多可以指定三个参数: ...原创 2018-11-27 15:50:51 · 493 阅读 · 0 评论 -
Go中slice作为参数传递注意点
Go中slice作为参数传递注意点slice 本质上是基于数组实现的当传参时,函数接收到的参数是数组切片的一个复制,虽然两个是不同的变量,但是它们都有一个指向同一个地址空间的array指针,当修改一个数组切片时,另外一个也会改变,所以数组切片看起来是引用传递,其实是值传递。// 案例type TestStruct struct { Id uint32 Num uint32}...原创 2018-11-28 11:50:49 · 2091 阅读 · 0 评论
分享