微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建函数的内联副本

如何解决如何创建函数的内联副本

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

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

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

解决方法

首先,需要了解内联函数与常规函数的内部原理。可能是

编译

正常函数编译

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

内联函数

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

开销

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

内存使用情况

内联函数由于会在多个位置重复扩展,因此浪费了内存,但与常规函数相比却提供了性能优势。普通函数调用可以节省内存,但瓶颈会降低性能

何时使用内联功能

如果跳转到函数调用所需的时间超过了执行该功能所需的时间,则不建议将其与普通函数进行分段,而应将内联函数用于此目的。

结论

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

最后,在普通函数内调用内联函数的上述方式与普通函数以及内联函数的用法和原理相违背。因为它没有提供性能或内存优势

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。