为什么对于内联函数,编译器将尝试在每个调用点生成代码

why for inline function, the compiler will try to generate code at each point of call

本文关键字:调用 代码 函数 于内联 编译器 为什么      更新时间:2023-10-16

我目前正在通过阅读Bjarne Stroustrup Programming_使用C++的原则和实践来学习c ++的内联函数。

作者提到

(对于内联函数(编译器将尝试为 每个调用点的函数,而不是使用函数调用 使用通用代码的说明。

我不完全确定"在每个调用点为函数生成代码"与"使用函数调用指令使用通用代码"有什么区别。区分这两个概念的根本区别是什么?

对于非内联函数,函数代码的单个副本存在于内存中的某个位置,编译器在每个调用站点生成一条CALL指令以跳转到该内存位置。 当函数退出时,执行流将跳回到调用站点。

对于内联函数,编译器会将函数代码的副本直接合并到每个调用站点的代码中。 该函数不会单独存在于内存中,并且不会生成CALL指令来跳转到函数并返回。