- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑到您只是尝试优化速度,那么决定是否内联函数的良好启发式是什么?显然代码大小应该很重要,但是当(例如)gcc 或 icc 确定是否内联函数调用时通常会使用其他因素吗?该领域是否有任何重要的学术工作?
最佳答案
具有 JIT 编译器和运行时类加载的语言还有其他权衡,因为虚拟方法不是静态已知的,但 JIT 可以收集运行时分析信息,例如方法调用频率:
Design, Implementation, and Evaluation of Optimizations in a Just-in-Time Compiler (针对 Java)讨论静态方法和动态加载类的方法内联及其对性能的改进。
Practicing JUDO: Java Under Dynamic Optimizations声称他们的“内联策略基于代码大小和分析信息。如果方法条目的执行频率低于某个阈值,则该方法不会被内联,因为它被视为冷方法。为了避免代码爆炸,我们不会内联字节码大小超过 25 字节的方法……为了避免沿着较深的调用链进行内联,当调用链上累积的内联字节码大小超过 40 字节时,内联就会停止。”尽管他们有运行时分析信息(方法调用频率),但他们仍然小心地避免内联大型函数或函数链以防止膨胀。
A search on Google Scholar揭示了许多论文,例如
A search on Google Books揭示了相当多的书籍,其中包含有关各种上下文中的函数内联的论文或章节。
The Compiler Design Handbook: Optimizations and Machine Code Generation有一个关于编译器设计中的统计和机器学习技术的章节,通过启发式方法设置各种参数,分析结果。本章引用了Vaswani等人的论文Microarchitecture Sensitive Empirical Models for Compiler Optimizations他们提出“使用经验模型构建微架构敏感模型以进行编译器优化的技术”。
(还有一些书从程序员的角度谈论内联,比如 C++ for Game Programmers ,里面讲了过于频繁内联函数的危险以及内联和宏的区别。编译器常常忽略程序员的内联如果他们可以确定这样做弊大于利,则请求;作为最后的手段可以使用宏来覆盖。)
关于gcc - 对于内联函数来说,什么是好的启发法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2130248/
我正在尝试构建一个 float 在 ViewController 顶部的按钮,它应该静态地保持在相同的位置,而它下面的 viewcontroller 可以上下滚动。 我设计了自己的按钮类,在父 Vie
目前Boost有hash_combine函数输出32位无符号整数(准确的说是size_t)。一些引用: http://www.boost.org/doc/libs/1_43_0/doc/html/ha
我试过看看如果我们尝试以与 Java 中类似的方式“破坏”一个对象数组,在 C++ 中会发生什么。 在 Java 中我们可以有一个 Double[] 类型的数组,例如,将其向上转换为 Number[]
很抱歉问了这么长的问题,但我需要做一个介绍以使其更清楚。 我需要一些代码来在我的 Headers 组件之间切换 和 . 起初我使用 CSS 媒体查询通过 display: block | none;
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 5 年前。 Improve
我是一名优秀的程序员,十分优秀!