对于一个一般函数或者一个成员函数是否应该inline我表示很迷惑。网上的说法是函数内部代码简短且经常被调用到,那么这个函数应该inline。怎么样的代码属于简短,
什么情况下属于经常被调用到,这个界限到底在哪里。而且这个inline也只是建议编译器对函数调用进行展开代码的动作,编译器是否照办还不确定。这里只知道几种情
况下的inline函数不会被编译器展开。
- 构造和析构函数
- 递归函数
- virtual函数
- 函数内含有循环和分支复杂的代码
- 没有函数调用的开销
- 当函数调用时没有参数入栈和出栈的开销
- 没有函数返回的开销
- 增加了代码运行的cache命中率
- 便于编译器更好的优化代码,去除无用的代码,更好的分支预测
- 增加了函数代码生成后的目标代码的大小,如果太大而不能放入cache,就减少了cache的命中率
- inline后函数内变量可能用到更多的寄存器,增加了寄存器的使用开销
- 如果有人修改了inline函数,那么所有调用这个函数的代码都得重新编译
- 不适用于嵌入式系统,因为在嵌入式系统中,加载可执行文件的空间是有限的