- 2024-12-19Golang内存模型与源码解析
0、引言本篇笔记用于记录作者在学习Golang的GC模型之前,对Golang内存模型的学习。目前使用的Go版本为1.22.41、Golang内存管理宏观结构假设我们每次向内存池申请空间时,都需要频繁地向操作系统发出请求,这不仅会增加内存分配的时间,还可能引入竞争和锁的开销,从而导致性能瓶颈。尤其
- 2024-12-15Go 内存管理
操作系统内存管理操作系统管理内存的存储单元是页(page),在linux中一般是4KB。而且,操作系统还会使用虚拟内存来管理内存,在用户程序中,我们看到的内存是不是真实的内存,而是虚拟内存。当访问或者修改内存的时候,操作系统会将虚拟内存映射到真实的内存中。申请内存的组件是PageTab
- 2024-03-13golang内存管理
解释定义:mheap:用于管理整个堆内存,mheap管理多个arena,arena管理多个span,一个span由多个page组成,一个arena有8192个page,page由内存块组成mspan:一个span对应一个mspanmcentral:mheap里有一个全局的mspan管理中心包含mcentral数组,0-135mcentral,一个mcentral(管理对应类型的spa
- 2024-02-24go堆内存分配
mutator申请内存是以应用视角来看问题,我需要的是某一个struct,某一个slice对应的内存,这与从操作系统中获取内存的接口(比如mmap)之间还有一个鸿沟。需要由allocator进行映射与转换,将以“块”来看待的内存与以“对象”来看待的内存进行映射。在现代CPU上,我们还要考虑内存分配
- 2023-12-27Golang基础(一)
粗略了解Golang的核心特性Go语言的特性一、并发编程不同于传统的多进程或多线程,golang的并发执行单元是一种称为goroutine的协程。其在语言级别提供关键字:go——用于启动协程。chan——golang中用于并发的通道,用于协程的通信。select——golang提供的多路复用机制。close
- 2023-12-03go 内存管理
协程栈go栈的位置1.Go协程栈位于Go-堆内存上2.Go堆内存位于操作系统虚拟内存上go栈的工作流程以main.main为出发点要记录runtime.main的栈基地址记录a和b的局部变量值开辟一个空间记录sum函数的返回值记录b和a的值,这里是为了方便sum在执行时候,