内联函数

来源:互联网 发布:java参数构造 编辑:程序博客网 时间:2024/06/05 07:34

1 为什么需要有内联函数

当遇到普通函数调用时,程序会保存当前函数的执行现场,将函数中的局部变量及函数地址入栈,然后在将即将调用的新函数加载到内存当中,这个复杂的过程经历了参数的复制,跳转到所用的函数的内存位置,执行函数代码,返回值存储。等函数执行完毕,在获取之前函数调用的地址,回去继续执行那个函数,这是一个很消耗时间的过程。所以内联函数有如下好处:

1)编译器不需要调转其他地址执行函数调用,这样就不用保存当前的函数现场

2)避免了函数调用所带来的内存和时间开销

但是内联函数也会带来一些缺点:

1)使得程序的体积增加,占用内存

2)由于内联函数是在编译出展开,内联函数一旦变零,需要重新编译

2 关于内联函数需要注意的几点

1)当函数体直接在类内时,默认为内联函数

2)当函数体在类外实现时,若是需要是内联函数需要inline修饰

3)由于inline在编译期间展开,所以inline函数必须在调用该函数的所以cpp文件中定义,且同名的函数内容完全相同。更好的做法是:在。h文件中实现,

3 慎用内联函数的原因

1)代码边长,使得内存消耗增加

2)当执行函数的时间远远大于调用函数的时间,就不用考虑内联

3)类的构造函数和析构函数不用内联,因为他们还会去调用自己父类的构造函数和修购·析构函数不是看起来那么短

4)inline函数造成代码膨胀会进一步导致额外的换页行为,降低了指令高速缓存装置的命中率,以及伴随的效率降低

0 0