知识卡片

内联函数用代码膨胀换调用开销

专业/工作 · 72

内容

函数调用需要压栈保存现场、跳转执行、再出栈恢复现场,对体积小但被高频调用的函数而言,这部分开销可能超过函数体本身的执行时间。Kotlin的inline修饰符让编译器在编译期把调用处直接替换成函数体本身,省去跳转和栈操作,代价是目标代码体积随调用次数增多而膨胀。这是一个典型的用空间换时间的取舍:内联对短小、高频调用的函数收益明显,但滥用会让编译产物迅速变大,因此语言把”要不要内联”交给开发者显式声明,而不是编译器自动决定。

参考来源

《Kotlin开发快速入门与实战》第4章《Kotlin函数》