Go语言 inline 内联的策略与限制

内联,就是将一个函数调用原地展开,替换成这个函数的实现。尽管这样做会增加编译后二进制文件的大小,但是它可以提高程序的性能。内联是高性能编程的一种重要手段。每个函数调用都有开销:创建栈帧,读写寄存器,这些开销可以通过内联避免。如果一个函数足够小,那调用这个函数的开销就显得昂贵,对于大函数编译器也会直接调用,放弃内联。

使用 go build -gcflags="-m" xxx.go 可显示被内联的函数

使用 go build -gcflags="-m -m" xxx.go可以看到为什么没有被内联原因:

包含以下内容的方法都不会被内联:闭包调用,select,for,defer,go关键字创建的协程。并且除了这些,还有其它的限制。当解析AST时,Go申请了80个节点作为内联的预算。当一个函数的开销超过了这个预算,就无法内联。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 统一规范篇 命名篇 开发篇 优化篇 统一规范篇 本篇主要描述了公司内部同事都必须遵守的一些开发规矩,如统一开...
    零一间阅读 1,997评论 0 2
  • 参考:https://www.cnblogs.com/shijingxiang/articles/12200355...
    码二哥阅读 598评论 0 0
  • 阅读前请悉知:本文是一篇翻译文章,出于对原文的喜爱与敬畏,所以需要强调:如果读者英文阅读能力好,请直接移步文末原文...
    wu_sphinx阅读 2,638评论 5 5
  • 零 前置知识 操作系统的每个进程都认为自己可以访问计算机的所有物理内存,但由于计算机必定运行着多个程序,每个进程都...
    voidFan阅读 1,256评论 0 1
  • 函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调...
    咻比嘟哗丶阅读 313评论 0 2