将内联加速 void a(string b) { cout << b; }

Will inline speed up void a(string b) { cout << b; }

本文关键字:lt cout string 加速 void      更新时间:2023-10-16

对于一个赋值,我们应该编写两个处理输出的方法。一个用于输出字符串,一个用于整数。

基本上,我们有两个方法调用另一个方法:

void TheClass::displayString(string str){ cout << str; }
void TheClass::displayNumber(int n) { cout << n; }

内联是否会通过不调用另一个函数或它会为cout创建更多的名称空间吗?

inline void TheClass::displayString(string str) { cout << str; }
inline void TheClass::displayNumber(int n) { cout << n; }

命名空间与之无关。

您可能看不到任何好处,原因很简单:函数太小了,我希望编译器无论如何都能内联它。

请记住,关键字inline提示,而不是指令,通常您可以让工具链决定何时内联。它擅长这一点。

我同意Tomalak的观点,内联只是一个提示,内联函数几乎没有任何好处。如今的处理器速度如此之快,再调用一个函数根本不重要。

我在opengl编程中使用了inline函数OpenGL程序是无限循环。为了使循环尽可能快地运行,你必须非常有效地进行编程,这样它才能对用户保持响应,并平滑地生成图像我相信声明一些函数inline会使程序运行得更快、更流畅。

毕竟,不要指望这种技术会带来巨大的性能升级,在极端情况下可能只会减少1-2%的运行时间。

使用这两个函数,无论编译器是否内联函数,您都可能看不到任何显著的差异。

原因是,流插入(<<(相当慢。比一个简单的(非内联的(函数调用慢得多。

而且,正如其他人已经指出的那样,您应该真正习惯于通过引用const(以及任何其他复制成本不高的对象(来传递字符串。

在某些情况下,最好通过值传递,即使(或特别是(复制成本很高(例如,在使用复制和交换实现operator =时(。但这种情况很少见,只要你不能自己决定什么是合适的,你最好总是通过引用const,然后总是通过值。

inline关键字与生成代码的内联作用非常小。inline关键字表示函数是内联声明的(即在声明时定义的(,因此在多个编译单元中可能有重复的定义。当您想在标头中定义函数时,需要使用它,因为此函数定义可能包含在多个编译单元中,如果没有inline关键字,这将违反"一个定义规则"。

如果你关心性能,那么在代码运行时对其进行评测,而不是让那些不知道你的代码在做什么的人猜测你的瓶颈在哪里。

如果您没有花费大量时间来生成输出,那么这无论如何都无关紧要。如果你已经分析了你的程序,并确定你的程序大部分时间都在生成输出,那么你可以开始考虑如何更快地生成代码。添加inline关键字可能不会让它更快,因为编译器可能已经在内联函数了,如果没有,即使你要求它也可能不会这么做(尽管可能(。

真正使代码更快的一个简单的第一步是使字符串参数为常量字符串&相反这样就不会复制字符串。更复杂的第二步是使用C输出API而不是C++流。根据我的经验,C API的速度要快得多,这在这里和这里都得到了支持。但是,我不建议改用C API,除非您确定您确实需要基于评测的性能。

优化以具有常量引用的一种方法:

void TheClass::displayString(cosnt string& str){ cout << str; }

Softnux,为什么不简单地创建一个基准呢?创建一个有一百万次重复的for循环,看看每个选项需要多少时间。然后分别为Debug和Release构建执行基准测试。现代编译器应该弄清楚何时内联或循环展开是更好的选择。

编辑:尝试使用字符串流。输出到控制台将是这里的瓶颈,而不是函数调用本身。