Advertisement

golang编译器解析

阅读量:

文章目录

    • //go:noescape
    • //go:nosplit
    • //go:linkname localname [importpath.name]
    • //go:nowritebarrierrec
    • //go:yeswritebarrierrec
    • //go:noinline
    • //go:norace

在学习golang源码的过程中,经常见到以//go:标注的注释出现。这些注释的主要作用是为了指示编译器如何处理这段代码。

//go:noescape

no.escape的功能在于阻止程序在运行时发生越界访问内存的情况。具体来说,在当前文件中紧跟其后的任何声明都必须是一个无主题(themeless)的函数(这意味着该函数并非使用Go语言编写),从而确保其行为不会受到外部环境的影响并能安全地完成执行任务。此外,在这种情况下,默认情况下不允许将通过参数传递到函数中的指针变量释放到堆栈或返回值区域以避免潜在的安全漏洞

复制代码
    runtime/os_dragonfly.go
    //go:noescape
    func lwp_create(param *lwpparams) int32
    
    //go:noescape
    func sigaltstack

全部评论 (0)

还没有任何评论哟~