![]() |
1
1
编辑:
讨论
使用以下函数定义,可以实现我的问题的目标:
此函数
此函数的用法如下所示:
生成的代码不包含加载和存储:
在编辑中添加:
如果
不幸的是,这意味着(平凡的)函数不会被内联,因为
|
![]() |
2
0
和
副作用必须在功能范围外可观察到。内联函数可能有另一种行为,因为副作用可能必须在封闭代码之外可以观察到。
这段代码将被优化为一个简单的返回
|
![]() |
3
0
对于C,唯一的限制是编译器必须确保代码的行为相同。如果编译器可以证明代码的行为是相同的,那么它可以并且将删除存储。 例如,我把这个放进 https://godbolt.org/ :
告诉它使用GCC 8.2和“-O3”,得到了这个输出:
函数的两个不同版本
如果将代码更改为:
然后它告诉编译器
当然,所有编译器中的所有优化器都不是完美的-对于更复杂的代码(以及对于不同的编译器,包括不同版本的GCC),结果可能会不同(编译器可能无法完成此优化)。这纯粹是编译器优化器的限制,而不是C本身的限制。 对于编译器的优化程序不够好的情况,有4种可能的解决方案:
|
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |