有关内联性能的问题

Jus*_*ers 2 c c++ optimization inline

我对在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;
}
Run Code Online (Sandbox Code Playgroud)
  1. 它到底是做什么的,为什么它可以帮助代码更快地运行?这是90年代的过时优化吗?

  2. 为什么我只能在小型函数上使用它?如果我为大型功能这样做会不好吗?

  3. 在大量功能上使用它是否不好?

Jer*_*fin 5

  1. 它更像是70年代或(至多)80年代的过时优化。除了使优化开始之外,几乎任何称职的编译器都可以选择函数进行内联扩展,而无需您的任何帮助。

  2. 它应该做的是消除调用该函数的开销。这对于像微小功能几乎什么都不做的事情非常重要。碰巧的是,这些非常普遍,以至于即使在C ++中获得中等性能也几乎需要编译器自动或多或少地扩展内联函数。

  3. 通常根本没有意义。

  4. 通常不像上面那样,当内联函数有好处时,编译器通常可以自动这样做。

需要注意的两件事:1)大多数编译器可以/将生成不带inline关键字的内联函数,以及2)如果大多数编译器inline认为该函数不适合于内联扩展,则可以/将忽略该关键字(尽管FWIW,Microsoft必须__forceinline克服)如果您确实确定您比编译器更了解,则使用后者)。