【问题标题】:How can i create an inline copy of an function如何创建函数的内联副本
【发布时间】:2020-09-19 15:21:41
【问题描述】:

我想要一个函数,它也有一个内联版本。我希望它们是相同的。

这会比手工复制更有效率吗?或者有更好的方法吗?

void inline in_function(int a) {
  printf("%d", a);
}
void function(int a) {
  in_function(a);
}

【问题讨论】:

标签: c function inline


【解决方案1】:

首先,需要了解内联函数与普通函数的内部结构。那些可能是

编译

正规函数编译

对于普通函数编译器执行“JUMP”或“LONG JUMP”指令以到达函数定义。

内联函数

当编译器遇到内联函数时,编译器会替换函数调用并将整个函数体插入代码中。这个过程称为膨胀

开销

通常,在执行过程中要到达一个正常的函数,代码执行器需要对函数定义进行一次“跳转”或“长跳转”,为此,执行器需要将所有当前cpu寄存器压入堆栈并执行跳跃。这会产生额外的开销,而对于内联函数则不会发生这种情况。

内存使用情况

内联函数,因为它们在多个地方重复扩展,会浪费内存,但比普通函数具有性能优势。普通函数调用可以节省内存,但瓶颈是性能下降

何时使用内联函数

如果跳转到函数调用所需的时间超过了执行该函数所需的时间,那么不建议将其与普通函数分段,而是使用内联函数来实现此目的。

结论

void inline in_function(int a) {
    printf("%d", a);
}
void function(int a) {
    in_function(a);
}

最后,上述在普通函数中调用内联函数的方式违背了普通函数的思想和内联函数的使用和原则。因为它不提供性能或内存优势

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 2012-11-10
    • 2014-10-07
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2014-06-15
    • 2014-08-19
    相关资源
    最近更新 更多