我有一些关于在 C 和 C++ 中对函数使用内联的问题。有人告诉我在我经常使用的小功能上使用它,但我想确切地了解它是如何工作的。这里只是一个示例的片段。
static inline point3D createPoint3D(float x, float y, float z){
point3D newPosition;
newPosition.x = x;
newPosition.y = y;
newPosition.z = z;
return newPosition;
}
它到底做了什么,为什么它可以帮助代码运行得更快?这是 90 年代的过时优化吗?
为什么我只能在小函数上使用它?如果我为大功能做它会很糟糕吗?
在大量函数上使用它不好吗?
最佳答案
它更像是 70 年代或(至多)80 年代的过时优化。几乎任何有能力的编译器都可以选择函数进行内联扩展,而无需您的任何帮助,除了启用优化开始。
它应该做的是消除调用函数的开销。这对于几乎什么都不做的微小函数之类的事情非常重要。碰巧的是,这些非常普遍,以至于从 C++ 中获得即使是半途而废的性能几乎都需要编译器或多或少地自动扩展内联函数。
使用它通常毫无意义。
通常不会——如上所述,当内联函数有好处时,编译器通常可以自动这样做。
需要注意两点:1) 大多数编译器可以/将生成不带 inline
关键字的内联函数,以及 2) 大多数编译器可以/将忽略 inline
关键字,如果他们认为该函数不适合内联扩展(不过,仅 FWIW,如果您真的确定自己比编译器更了解,Microsoft 有一个 __forceinline
来克服后者)。
关于c++ - 关于内联性能的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696801/