为什么以及何时应该在 C++ 中将函数声明为 noinline?

问题描述 投票:0回答:1

msvc 的 手册页 说:

__declspec(noinline)
告诉编译器永远不要内联特定的 成员函数(类中的函数)。

如果函数很小且不适合,那么不内联函数可能是值得的。 对代码的性能至关重要。也就是说,如果函数是 小并且不太可能被经常调用,例如一个函数 处理错误情况。

请记住,如果函数被标记为 noinline,则调用 函数会更小,因此本身就是编译器的候选者 内联。

class X {
   __declspec(noinline) int f() {
      return 0;
   }   // will not inline
};

但是我还是不明白:

之间有哪些差异优点

class X {
   __declspec(noinline) int f() {
      return 0;
   }   // will not inline
};

class X {
   int f() {
      return 0;
   }
};

c++ optimization visual-c++
1个回答
0
投票

如果您想使用指向函数的指针来调用该函数,则不应内联它。 而且,如果您编写一个库并导出该函数,则不应内联它。

两个原因都是一样的:如果你想使用函数的地址,你应该声明非内联。

© www.soinside.com 2019 - 2024. All rights reserved.