关于inline究竟在什么时候使用的问题

P3380 【模板】树套树

[题目链接:二逼平衡树](https://www.luogu.com.cn/problem/P3380)
by wind_whisper @ 2021-10-01 18:41:47


所有都加上,编译器会自己给你优化
by wdy1028 @ 2021-10-01 18:42:08


@[wind_whisper](/user/449265) 以我所知哈,函数会让宁的代码变得整洁,但是过度的递归调用会让你超时。而 inline 可以让你看到的是一个函数放在那里,但是运行速度却是和放在 main 函数里面的速度基本统一
by Miracle_ZX @ 2021-10-01 18:44:02


@[wind_whisper](/user/449265) 我也不是很确定我的解释是否准确,宁可以做个参考
by Miracle_ZX @ 2021-10-01 18:44:52


个人认为有没有可能是评测机波动?毕竟最后一个点用了1.99s,时限是2.00s,稍微波动一下就TLE了
by Andrewzdm @ 2021-10-01 18:46:28


你这是评测机波动吧。。你再交几发试试? 递归函数加 `inline` 编译器是不管的,也就是说加了和没加没有任何区别
by LroseC @ 2021-10-01 18:46:31


在GNU O3优化的优化选项中有一项如下: > -finline-functions: 这种优化技术不为函数创建单独的汇编语言代码,而是把函数代码包含在调度程序的 代码中。 对于多次被调用的函数来说, 为每次函数调用复制函数代码。 虽然这样对于减少代码长度不利, 但是 通过最充分的利用指令缓存代码, 而不是在每次函数调用时进行分支操作, 可以提高性能 这一段大意就是O3帮你把声明的函数自动变成``inline`` 也就是``inline``关键字是对于**优化器**的提示,以指示优先采用函数的内联替换而不是函数调用,就是直接在主函数创建一个副本,避免了传参. 在编译器中编译的时候会判断这个``inline``有没有实际意义的,如果递归了的话加了和没加应该没区别. 推荐你到[这个网站](https://gcc.godbolt.org/)手动试试
by 望月Asta @ 2021-10-01 19:01:02


|