github.com/ltltlt/go-source-code@v0.0.0-20190830023027-95be009773aa/runtime/NOTES.MD (about) 1 # Golang 看runtime的经验 2 3 ## pragma(编译指示) 4 5 ### //go:noinline 6 7 禁用内联 8 9 ### //go:nosplit 10 11 不进行栈溢出检测(这个检测会及时发现goroutine栈不够用了而扩张栈空间) 12 13 ### //go:noescape 14 15 禁止逃逸, 自己代码也可以使用,但只能用于只有声明,主体用汇编写的函数 16 17 ### //go:norace 18 19 跳过竞态检测 20 21 ### //go:linkname localname importpath.name 22 23 指示编译器使用importpath.name作为localname的名字 24 25 ### //go:nowritebarrier(see HACKING.md) 26 27 指示编译器如果这个函数包含write barrier时产生一个错误, 并不能阻止write barrier的产生 28 29 ## register 30 31 - FP: frame pointer, 栈帧的基本地址(但弹出一个栈帧时, SP会赋为FP), 函数参数不在FP~SP之间, 而是在FP上, 0(FP)是第一个参数 32 - SP: 栈顶指针, 访问栈上变量都是SP+... 33 - PC: program counter, 程序计数器, 下一条指令运行的地址 34 - SB: static base pointer, 静态符号基址