Tag: 内联函数

使用内联函数有什么问题?

虽然在某些情况下使用内联函数会非常方便, 内联函数有什么缺点吗? 结论 : 显然,使用内联函数没有任何问题。 但值得注意的是以下几点! 内联过度使用会使程序变慢。 根据函数的大小,内联可能导致代码大小增加或减less。 内联一个非常小的访问函数通常会减less代码的大小,而内联一个非常大的函数会显着增加代码的大小。 在现代处理器上,较小的代码通常由于更好地使用指令caching而运行得更快。 – Google指南 内联函数的速度优势随着函数的增长而趋于减小。 在某些时候,与函数体的执行相比,函数调用的开销变得很小,并且损失了好处- Source 内联函数可能无法正常工作的情况很less: 对于返回值的函数; 如果存在返回语句。 对于不返回任何值的函数; 如果存在循环,开关或goto语句。 如果一个函数是recursion的。 -资源 只有在指定了optimize选项时, __inline inline关键字__inline使函数内联。 如果指定了优化,是否使用__inline取决于内联优化器选项的设置。 默认情况下,内联选项在优化器运行时生效。 如果指定了优化,则如果您希望忽略__inline关键字,还必须指定noinline选项。 -资源

内联函数中的静态variables

我有一个在头文件中声明和定义的函数。 这本身就是一个问题。 当这个函数没有被内联时,每个使用这个头部的翻译单元都会得到这个函数的一个副本,当它们被链接在一起的时候会被复制。 我“固定”,通过内联function,但恐怕这是一个脆弱的解决scheme,因为据我所知,编译器不保证内联,即使您指定“内联”关键字。 如果不是这样,请纠正我。 不pipe怎样,真正的问题是,这个函数里的静态variables会发生什么? 最终有多less份?

外部内联

我明白,“内联”本身就是对编译器的一种build议,在其内容中可能会或可能不会内联函数,也会产生可链接的对象代码。 我认为“静态内联”的做法是一样的(不一定内联),但内联时不会生成可链接的对象代码(因为没有其他模块可以链接到它)。 “extern inline”在哪里适合图片? 假设我想用一个内联函数replace一个预处理macros,并且要求这个函数被内联(例如,因为它使用__FILE__和__LINE__macros,这个macros应该为调用者parsing而不是这个被调用的函数)。 也就是说,如果函数没有被内联,我想看到一个编译器或链接器错误。 “extern inline”是否这样做? (我假设,如果没有,除了坚持使用macros之外,没有办法实现这种行为。) C ++和C有区别吗? 不同的编译器厂商和版本有区别吗?

C ++中内联函数的好处?

在C ++中使用内联函数的优点/缺点是什么? 我发现它只会提高编译器输出的代码的性能,但是对于今天优化的编译器,快速的CPU,巨大的内存等(不像1980年<内存稀less,所有内容都适合100KB内存)他们今天真的有优势吗?