inline用来定义一个类的内联函数,用它来替代C中表达式形式的宏定义,而且消除宏定义缺点。可以解决一些频繁调用的函数大量消耗栈空间问题。它是一种实现关键字,就是在函数实现的地方加上inline关键字才有用,在声明的地方加没有用。
同时它只是一种建议,编译器可以忽略这个建议。因此Inline不一定就会被编译器内联编译。保证内联函数的定义被编译器看到的话,使用 ALWAYS_INLINE。
内联函数在编译器最终生成的代码中是没有定义的,这个函数是不存在的,也就无法实现对内联函数的hook;
内联函数没有普通函数调用时的额外开销(压栈,跳转,返回等);
内联函数是一种特殊的函数,在源码中具有普通函数的特征;
内联函数是对编译器的一种请求.因此,编译器有可能拒绝这种请求;内联函数由编译器处理,直接将编译后的函数体插入调用的地方。
内联和宏的效果很像,但是宏代码是由预处理器处理,进行简单的文本替换,没有任何编译过程.
如何hook 编译之后的内联函数?
进入该内联函数源码复写一份同样的代码,但是定义为普通函数,编译源码之后即可hook