Go
42 篇笔记
- 3.3 Go构建过程historical
1. 文本文件 保存之后这个文件以二进制形式存储在磁盘中 使用vim打开,敲入 :%!xxd 最左边的地址列,中间是文本字符对应的十六进制ASCII编码,最右边是文本字符。 ASCII表可以通过 man ascii 查询 像这种把二进制通过字符表转换成人类可读的文件叫做文本文件,不可读的就是二进制文
- 3.4 内存管理historical
1. Golang内存分区 1.1. 栈 Golang栈管理.md 1.2. 堆 Golang堆管理.md 1.3. 全局区-静态全局变量区 - 全局变量+常量 - 分配:进程启动时 - 回收:进程退出时,由操作系统回收 1.4. 代码区 2. Golang runtime.MemStat Top
- 3.5 plan9汇编historical
1. Plan9汇编是什么 - 伪汇编 - 跟汇编一样需要通过汇编器转换成机器指令才能被CPU执行 - 伪的原因在于:对机器指令反汇编无法生成Go汇编,只能生成平台相关的汇编 2. 寄存器 - 通用寄存器 与AMD64机器的寄存器对应关系如下: 一般前六个用来传递参数,BP和SP用于管理栈顶和栈底
- 3.6 内存对齐historical
1. 机器字长 1.1. 地址总线和数据总线 - CPU通过地址总线到内存中寻址,而内存通过数据总线把数据传输给CPU - 地址总线的位数决定了内存大小:比如8bit地址总线,那么可以寻址[0, 255]总共256B的内存,内存超过256B也利用不了 - 数据总线则决定了一次性能传输多少数据:比如要
- 3.7 GChistorical
1. 什么是GC GC.md 2. 为什么需要GC GC.md 2.1. GC的问题 2.1.1. 内存泄露 Golang内存泄露.md 2.1.2. STW 通过三色标记法减少GC STW的时间 3. 如何进行垃圾回收 3.1. GC触发 - 主动触发 - 通过调用 runtime.GC 来触发
- 3.8 Golang栈管理historical
1. 栈是什么 - 空间小,数据存放时间较短暂。栈在高地址,从高地址向低地址增长 - 分配:函数调用自动分配 - 回收:函数返回自动回收 2. Golang栈的特点 2.1. 动态扩容 - go runtime不是给每个goroutine分配固定的空间,而是需要的动态分配栈空间 - 创建gorout
- 3.9 Golang堆管理historical
1. 堆是什么 - 空间大,数据存放时间较长。堆在低地址,从低地址向高地址增长 - 分配:程序员手动分配 - 回收:GC Go的内存管理是runtime,也就是说并不是每次内存分配都需要进行系统调用。 采用的算法是 TCMalloc 算法,即 Thread-Caching Malloc 。 他把可用
- 4.1 unittesthistorical
1. 是什么 单元测试 2. 使用 - 文件名 xxx test.go - 导入 testing - 函数名必须 TestXXX - 运行 - go test . 3. 参考 - Go语言基础之单元测试 \ 李文周的博客 - testing \- The Go Programming Languag
- 4.2 pprofhistorical
1. pprof是什么 Golang的性能分析工具。 2. 如何使用pprof 有两个库: runtime/pprof :采集工具型应用运行数据进行分析 net/http/pprof :采集web应用运行时数据进行分析 benchmark :压测 2.1. runtime/pprof 2.1.1.
- 4.3 benchmarkhistorical
1. 使用 - bench.go - bench test.go - 测试: - go test -bench=. - 查看内存分配信息: go test -bench=. -benchmem - 生成CPU信息: go test -bench=. -benchmem -cpuprofile pro