Kam*_*nco 6 c optimization performance memory-management overhead
人们常常说,在程序中调用函数会产生一定的开销,或者不可避免地会产生其他问题。与没有该函数调用的类似程序相比,这可以更好地解释吗?
内联
通常,您只能向编译器建议inline一个函数,但编译器可能会另有决定。不过,Visual Studio 提供了自己的forceinline关键字。某些函数不能内联,例如当它们是递归的或在编译时无法确定目标函数时(通过函数表调用,C++ 中的虚函数调用)。
我建议您相信编译器是否应该内联函数。如果您真的想内联您的代码,请考虑使用宏。
高架
当您使用函数时,内存开销最小,因为您不会重复代码;内联代码被复制到调用站点中。这些天的性能开销可以忽略不计,因为现代架构真的很好地预测和调用,只有大约 1-2 个周期的开销。
这取决于您的编译器设置及其优化代码的方式。一些函数是内联的。其他人不是。这通常取决于您是针对大小还是针对速度进行优化。
通常,调用函数导致延迟的原因有两个:
该程序需要挂钩到内存中函数代码开始的某个随机位置。为此,它需要将当前光标位置保存到堆栈中,以便知道从哪里返回。这一过程消耗了不止一个 CPU 周期。
根据您的 CPU 架构,可能有一个管道,它与您当前的指令执行并行地将下几条指令从内存中提取到 CPU 缓存中。这是为了加快执行速度。当你调用一个函数时,游标钩到一个完全不同的地址,所有缓存的指令都从管道中刷新。这会导致进一步的延误。
| 归档时间: |
|
| 查看次数: |
8391 次 |
| 最近记录: |