Go源码系列
文章平均质量分 92
墨子哲
感兴趣方向WEB架构,大数据,人工智能
展开
-
内存分配管理
内存分配管理 1.基本概念 Go构建了一套自主内存管理分配,没有使用传统的内存分配器malloc,器,原理类似于tcmalloc。为了方便管理内存,首先会向系统申请一大块内存,将内存切分成小块,通过内存分配的办法进行管理。 1.1 基本策略: 1>. 每次从操作系统申请一大块内存(比如 1MB),以减少系统调用。 2>. 将申请到的大块内存按照特定大小预先切分成小块,构...原创 2017-06-27 10:48:13 · 744 阅读 · 0 评论 -
Golang汇编层面代码分析
这篇文档是对于Go编译器套件(6g, 8g, etc.)中不常用的汇编语言的快速预览,涵盖面不是很广泛。Go的汇编语言基于Plan 9的汇编,Plan 9网站的页面上有详细描述。如果你想编写汇编语言,你应该读这篇文档,虽然它是Plan 9相关的。这边文档总结了汇编的语法,并且描述了使用汇编语言和Go程序交互时的特殊之处。有一点是很重要的是,Go的汇编中没有直接体现出底层的机器。有些汇编细节能直接对...原创 2018-05-09 15:59:12 · 3058 阅读 · 0 评论 -
Golang汇编层面代码分析-内置函数和过程调用
绍Golang中的内置函数和相关操作代码的汇编实现,可以作为上篇博客的补充和实践。汇编中过程调用的参数是通过栈来传递的,在栈上的布局如下:参数3 参数2 参数1 <-FP 保存PC <-SP ... ... 内置函数: new, make, appendpackage main import ( "fmt" ) type new_int int var ( go...原创 2018-05-09 16:51:50 · 1630 阅读 · 1 评论 -
垃圾回收机制
垃圾回收机制 基本概念 Go语言垃圾回收是一种非分代,非紧缩,写屏障,三色并发标记清理机制。 1.1 分代算法 将堆划分为两个或多个称为 代(generation) 的空间。新创建的对象存放在称为 新生代(young generation) 中(一般来说,新生代的大小会比 老年代 小很多),随着垃圾回收的重复执行,生命周期较长的对象会被 提升(promotion) 到老年代中。 ...原创 2018-04-20 15:17:34 · 534 阅读 · 0 评论 -
并发调度原理
并发调度原理 并发调度MPG(解释1) Processor(简称 P),其作用类似 CPU 核,用来控制可同时并发执行的任务数量。 每个工作线程都必须绑定一个有效 P 才被允许执行任务,否则只能休眠,直到有空闲 P 时 被唤醒。P 还为线程提供执行资源,比如对象分配内存、本地任务队列等。线程独享所绑 定的 P 资源,可在无锁状态下执行高效操作。 进程内的一切都在以 goroutine(...原创 2018-07-16 16:14:08 · 2386 阅读 · 0 评论 -
引导启动和初始化
引导启动和初始化 1.引导启动 1.1启动函数入口 1.1.1 准备运行文件 hello.go func main() { fmt.Println("hello world") } 使用-gcflags "-N -l" 参数关闭编译器代码优化和函数内联,避免断点和单步执行无法准确对应源码行数,避免小函数和局部变量被优化掉。 go build -gcflags "-N...原创 2017-06-09 00:37:45 · 810 阅读 · 0 评论