嗨, 什么是内联函数,究竟内联函数在短暂的不准确的使用情况。 程序员必须以内联方式选择函数。 我谷歌搜索的答案,但我仍然喜欢stackoverflow。
回答
函数内联是由编译器
做对于编译成机器代码的典型功能,您将有功能prologs和Fepilogs性能优化。 prolog和epilog设置堆栈帧,保存寄存器,为本地分配空间,并根据调用约定做其他所需的任何操作。这样做需要CPU周期。对于非常小的函数(例如属性获取器和设置器),相对于函数中的实际工作,此成本可能较高。这是内联来节省一天的地方:)
内联函数是一个函数,您已经定义编译器决定直接包含到调用它的方法中,而不是生成call
指令。换句话说,目标内联函数的实际机器代码被“内联”到调用方法的主体中。例如,如果Foo
被称为Bar
和Bar
被内联,并且您在调试器下运行了您的程序,您将看到Bar
的指令Foo
的正文。对于Bar
的epilog和prolog可以被丢弃。
大多数情况下,您应该让编译器确定何时为您内联函数。内联不是神奇或自由的。它增加了代码大小和变量的实时范围,并且迫使编译器用更少的位置来处理更多的数据。正因为如此,编译器有一套复杂的启发式方法来确定成本何时值得。大多数编译器都允许内联提示。对于Visual Studio,请参阅inline, __inline, and __forceinline。然而,即使有了这些提示,编译器也可以自由地忽略你并做它想做的事情。
相关的编译器概念是概述和部分内联(见here),它试图将冷却的,不频繁的代码块移出大方法的主体,以改善缓存行为,甚至为内联概述铺平了道路方法。
定义由C++ FAQ Lite:
当编译器内联展开一个函数调用,该函数的代码被插入到调用方的码流(概念上类似于用#define宏发生)。
这可以根据数十万个其他事物来提高性能,因为优化程序可以程序化地集成被调用代码 - 优化被调用代码到调用者中。
查看同一页面的示例和更多详细信息。
http://www.parashift.com/c++-faq-lite/inline-functions.html
即使你指定inline
标志,则编译器可能会忽略它。如果你正在编写一个库,并且对你想要提供的性能保证有深刻的思考(并对其进行了描述),那么你可以考虑将inline
添加到你的函数或方法中。即使如此,也不能保证你会在编译的代码中看到任何不同,因为编译器可能已经决定内联它们,或者忽略你的请求。
有关性能的警告:内联并不总是会提高性能,因为它也会增加代码的大小。
配置您的应用程序,找到瓶颈,考虑算法级别的更改,并且只有当您需要在内部循环中挤出性能的最后一点时,才会尝试内联函数,展开循环或其他微观优化。
- 1. 什么是内联函数?
- 2. exists()的确切用法是什么?
- 3. 什么是方法内联?
- 4. 什么是从匿名函数返回值的内联语法?
- 5. 使用sqlsrv切换数据库的正确方法是什么?
- 6. 确切的身份仿函数是做什么的?
- 7. 定义python tp_call函数的确切条件是什么?
- 8. 什么时候应该使用宏而不是内联函数?
- 9. Azure cookie'WAWebSiteSID'的确切用途是什么?
- 10. “AspNet_SqlCacheTablesForChangeNotification”的确切作用是什么
- 11. JSON的确切用途是什么?
- 12. AsyncTask android中onCancelled(Object result)方法的确切用法是什么?
- 13. R中OR函数(|)的正确用法是什么?
- 14. 在C++中使用rand()函数的正确方法是什么?
- 15. 什么是CSS attr函数的正确用法?
- 16. C中的移位运算符的确切用法是什么?
- 17. 初始化php关联数组的正确方法是什么?
- 18. 为什么内联函数不能查看内部作用域?
- 19. 以下函数的用法是什么?
- 20. JMeter - __logn函数的用法是什么?
- 21. 函数DosPathToSessionPath的用法是什么?
- 22. 什么是内联脚本?
- 23. 什么是“内联线程”?
- 24. “IFS =!”的确切用法和含义是什么?
- 25. 什么是Dynamics CRM中clientglobalcontext.js.aspx的确切用法?
- 26. xml中xmlns的确切用法是什么以及html
- 27. 在jdk1.6中使用Endorsed目录的确切方法是什么
- 28. 有什么方法可以内联递归函数吗?
- 29. Yii Appliance的确切目的是什么?
- 30. 将内联FTP链接用于文件的正确方法是什么?
内联不一定会使代码膨胀。当内联调用时,编译器可以跳过组织调用的代码,因此内联实际上可以减少代码。 – sharptooth 2010-08-24 06:54:47