函数内联

    技术2022-07-10  94

    函数内联

    我们在日常开发中,肯定会A函数去调用B函数,而且B函数没有调用A函数,在翻译成汇编语言是一条call指令,此时就需要指令跳转,就会带来程序方法的压栈和出栈,消耗一定的时间,拖慢执行速度。

    实时上我们可以把调用的方法内联到需要执行的函数里,加快程序的运行。

    事实上,这就是一个常见的编译器进行自动优化的场景,我们通常叫 函数内联(Inline)。我们只要在GCC编译的时候,加上对应的一个让编译器自动优化的参数-O,编译器就会在可行的情况下,进行这样的指令替换。

    当然JAVA的JVM在编译优化时候,也会进行方法内联,这个以后我们讲。

    内联带来的优化是,CPU需要执行的指令数变少了,根据地址跳转的过程不需要了,压栈和出栈的过程也不用了。

    不过内联并不是没有代价,内联意味着,我们把可以复用的程序指令在调用它的地方完全展开了。如果一个函数在很多地方都被调用了,那么就会展开很多次,整个程序占用的空间就会变大了。

    这样没有调用其他函数,只会被调用的函数,我们一般称之为 叶子函数(或叶子过程)。

    Processed: 0.010, SQL: 9