inline的使用
inline可以看成是函数的宏展开
在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数,栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。
#include <stdio.h> #include<string.h> // 函数定义为inline即:内联函数 inline char* inline_test(int num) { return (num % 2 > 0) ? "奇" : "偶"; } int main() { int i = 0; for (i = 1; i < 10; i++) { printf("inline_test: i:%d 奇偶性:%s\n", i, inline_test(i)); } return 0; }
dbtest(i)的地方都换成了(i%2>0)?”奇”:”偶”,这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,
(1) 不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。
(2) 而所有(除了最平凡,几乎什么也没做)的虚拟函数,都追阻止inlining的进行。
这应该不会引起太多的惊讶,因为virtual意味着”等待,直到执行时期再确定应该调用哪一个函数“,
而inline却意味着”在编译阶段,将调用动作以被调用函数的主体取代之“。
如果编译器做决定时,尚不知道该调用哪一个函数,你就很难责成他们做出一个inline函数。
[参考博客](https://blog.csdn.net/u011857683/article/details/81606433)