Visual Studio包含对__forceinline的支持.Microsoft Visual Studio 2005文档指出:
__forceinline关键字会覆盖成本/收益分析,而是依赖于程序员的判断.
这提出了一个问题:编译器的成本/收益分析何时出错?而且,我怎么知道这是错的?
在什么情况下假设我在这个问题上比我的编译器更清楚?
只有当您的分析数据告诉您时,您才会比编译器更清楚.
我使用它的一个地方是许可证验证.
防止轻松破解的一个重要因素是验证在多个地方而不是仅仅一个地方获得许可,并且您不希望这些地方成为相同的函数调用.
*)请不要在讨论中将所有内容都破解 - 我知道.而且,仅这一点并没有多大帮助.
编译器正在基于静态代码分析做出决策,而如果你描述为唐说,那么你正在进行一个可以进一步深入的动态分析.对特定代码段的调用次数通常很大程度上取决于使用它的上下文,例如数据.分析一组典型的用例将执行此操作.就个人而言,我通过启用自动回归测试的分析来收集这些信息.除了强制内联之外,我还展开了循环,并根据这些数据进行了其他手动优化,效果很好.之后再次进行分析也是必要的,因为有时您的最佳努力实际上会导致性能下降.再一次,自动化使这减少了很多痛苦.
但是,根据我的经验,调整算法比直接代码优化提供了更好的结果.
我已经为有限的资源设备开发了9年左右的软件,并且我唯一一次看到需要使用的__forceinline
是在一个紧凑的循环中,相机驱动程序需要将像素数据从捕获缓冲区复制到设备屏幕.在那里我们可以清楚地看到特定函数调用的成本确实影响了覆盖绘图性能.
唯一可以确定的方法是使用和不使用来衡量性能.除非您编写高性能关键代码,否则通常不需要这样做.