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, 静态符号基址