社区
其他技术讨论专区
帖子详情
Go语言中什么样的函数会成为内联函数?
weixin_38065454
2019-09-20 10:55:51
用google没找到go语言里内联函数的定义
我看文档上说非内联函数调用时会触发goroutine的调度,但是我今天做实验写了好几个函数都没有触发调度,故有此问。
...全文
171
5
打赏
收藏
Go语言中什么样的函数会成为内联函数?
用google没找到go语言里内联函数的定义 我看文档上说非内联函数调用时会触发goroutine的调度,但是我今天做实验写了好几个函数都没有触发调度,故有此问。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38067747
2019-09-20
打赏
举报
回复
这个编译器会处理成内联吧?
weixin_38067813
2019-09-20
打赏
举报
回复
什么样的函数会被处理成内联函数?比较短的函数吗?
weixin_38078044
2019-09-20
打赏
举报
回复
这个可以通过编译成汇编看看
weixin_38082682
2019-09-20
打赏
举报
回复
如果这个内联指的是"built-in",那就是那几个小写开头的函数:`append`/`make`/`len`/`panic`/`recover`
weixin_38103077
2019-09-20
打赏
举报
回复
可以查看汇编代码,go build -gcflags -m main.go 能看到是否有内联函数,原文参考:https://medium.com/@felipedutratine/does-golang-inline-functions-b41ee2d743fa
aws-sam-serverless-boilerplate-go:无服务器应用程序与AWS SAM和Go的样板
用于golang的基于无服务器AWS SAM的样板
2021-2022计算机二级等级考试试题及答案No.13547.docx
2021-2022计算机二级等级考试试题及答案No.13547.docx
Reversing:逆向工程揭密
第三卷************** 不错的PDF电子书,共3个分卷,点我名字可以找全 第1部分 逆向101 第1章 基础 3 1.1 什么是逆向工程 3 1.2 软件逆向工程:逆向 4 1.3 逆向应用 4 1.3.1 与安全相关的逆向 5 1.3.2 软件开发
中
的逆向 8 1.4 底层软件 9 1.4.1 汇编语言 10 1.4.2 编译器 11 1.4.3 虚拟机和字节码 12 1.4.4 操作系统 13 1.5 逆向过程 13 1.5.1 系统级逆向 14 1.5.2 代码级逆向 14 1.6 工具 14 1.6.1 系统监控工具 15 1.6.2 反汇编器 15 1.6.3 调试器 15 1.6.4 反编译器 16 1.7 逆向合法吗? 17 1.7.1 互操作性 17 1.7.2 竞争 18 1.7.3 版权法 19 1.7.4 商业机密和专利权 20 1.7.5 美国数字千禧版权法 20 1.7.6 DMCA案例 22 1.7.7 许可证协议 23 1.8 代码范例与工具 23 1.9 结论 23 第2章 底层软件 25 2.1 高阶视角 26 2.1.1 程序结构 26 2.1.2 数据管理 29 2.1.3 控制流 32 2.1.4 高级语言 33 2.2 低阶视角 37 2.2.1 底层数据管理 37 2.2.2 控制流 43 2.3 汇编语言101 44 2.3.1 寄存器 44 2.3.2 标志位 46 2.3.3 指令格式 47 2.3.4 基本指令 48 2.3.5 范例 52 2.4 编译器和编译入门 53 2.4.1 定义编译器 54 2.4.2 编译器架构 55 2.4.3 列表文件 58 2.4.4 专用编译器 59 2.5 执行环境 60 2.5.1 软件执行环境(虚拟机) 60 2.5.2 现代处理器的硬件执行环境 63 2.6 结论 68 第3章 Windows基础知识 69 3.1 组件及基本架构 70 3.1.1 简要回顾 70 3.1.2 特征 70 3.1.3 支持的硬件 71 3.2 内存管理 71 3.2.1 虚拟内存和分页 72 3.2.2 工作集 74 3.2.3 内核内存和用户内存 74 3.2.4 内核内存空间 75 3.2.5 区段对象 77 3.2.6 VAD树 78 3.2.7 用户模式的内存分配 78 3.2.8 内存管理API 79 3.3 对象与句柄 80 命名对象 81 3.4 进程与线程 83 3.4.1 进程 84 3.4.2 线程 84 3.4.3 运行状态切换 85 3.4.4 同步对象 86 3.4.5 进程初始化顺序 87 3.5 应用程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调用机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐(Section Alignment) 95 3.6.4 动态链接库 96 3.6.5 头部 97 3.6.6 导入与导出 99 3.6.7 目录 99 3.7 输入与输出 103 3.7.1 I/O系统 103 3.7.2 Win32子系统 104 3.8 结构化异常处理 105 3.9 结论 107 第4章 逆向工具 109 4.1 不同的逆向方法 110 4.1.1 离线代码分析 110 4.1.2 现场代码分析 110 4.2 反汇编器——ILDasm 110 4.3 调试器 116 4.3.1 用户模式调试器 118 4.3.2 内核模式调试器 122 4.4 反编译器 129 4.5 系统监控工具 129 4.6 修补工具 131 Hex Workshop 131 4.7 其他类型的逆向工具 133 可执行程序转储工具 133 4.8 结论 138 第2部分 应用逆向 第5章 未公开的技术 141 5.1 逆向和互操作性 142 5.2 基本原则 142 5.3 定位未公开的API
函数
143 我们要找什么? 144 5.4 案例研究:NTDLL.DLL
中
的 5.4 Generic Table API 145 5.4.1 RtlInitializeGenericTable 146 5.4.2 RtlNumberGenericTableElements 151 5.4.3 RtlIsGenericTableEmpty 152 5.4.4 RtlGetElementGenericTable 153 5.4.5 RtlInsertElementGenericTable 168 5.4.6 RtlLookupElementGenericTable
go的内联优化
先说一下什么是内联吧。内联,就是将一个
函数
调用原地展开,替换成这个
函数
的实现。通俗易懂的解释就是将
函数
的调用转换为一个
函数
实现。这样做
会
增加编译后二进制文件的大小,但它可以提高程序的性能。那么
Go语言
中
,什么样的
函数
可以被内联呢?我们一起来看。 规则 让我们从一个示例开始。下面这个程序的源码,分别编写在两个文件
中
,作用是对一组数字进行加或减: package main func main() { n := []float32{120.4, -46.7, 32.50, 34.65, -67.45}
golang 内联简述
什么是内联: 栈分配内存
会
比堆分配高效地多,那么,我们就
会
希望对象能尽可能被分配在栈上。在Go
中
,一个goroutine
会
有一个单独的栈,栈又
会
包含多个栈帧,栈帧是
函数
调用时在栈上为
函数
所分配的区域。但其实,
函数
调用是存在一些固定开销的,例如维护帧指针寄存器BP、栈溢出检测等。因此,对于一些代码行比较少的
函数
,编译器倾向于将它们在编译期展开从而消除
函数
调用,这种行为就是内联。 内联能提升性能,是否所有
函数
都内联比较好? 内联就等于将
函数
的实现逻辑,写在调用的地方(原地展开)。若
函数
在多处被调用,内联必然
会
增
其他技术讨论专区
473
社区成员
791,201
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章