首页 / 知识
关于c ++:使用内联函数有什么问题?
2023-04-15 05:41:00

What is wrong with using inline functions?虽然在某些情况下使用内联函数会非常方便, 内联函数有什么缺点吗? 结论: 显然,使用内联函数没有错。 但是值得注意以下几点!
值得指出的是,inline关键字实际上只是对编译器的提示。编译器可能会忽略内联,而只是在某个地方为该函数生成代码。 内联函数的主要缺点是它会增加可执行文件的大小(取决于实例化的数量)。在某些平台(例如嵌入式系统)上,这可能是个问题,特别是如果函数本身是递归的。 我还建议使内联函数非常小-内联函数的速度优势会随着函数大小的增加而逐渐减少。在某些时候,与函数主体的执行相比,函数调用的开销变小,并且失去了好处。
可能会增加
我认为通常可以 编辑:这是linux CodingStyle文档关于它的内容:
内联有一个问题-一旦您在头文件中定义了一个函数(通过在类内部定义成员函数的主体来暗示内联,无论是显式的还是隐式的),就没有简单的方法来更改它而不会强迫用户重新编译(而不是重新链接)。通常这会引起问题,特别是如果所讨论的函数在库中定义并且标头是其接口的一部分时,尤其如此。 就像其他人提到的那样,inline关键字只是对编译器的提示。实际上,大多数现代编译器将完全忽略此提示。编译器有自己的启发式方法来决定是否内联函数,并且坦率地说,我们不希望您提出建议,非常感谢。 如果您确实确实想进行内联,如果您已经对它进行了概要分析并查看了反汇编以确保重写编译器启发式方法确实有意义,那么可以这样做:
但是,inline关键字确实具有第二个有效目的-在头文件中声明函数,但不在类定义中声明函数。需要inline关键字来告诉编译器不要生成该函数的多个定义。 我同意其他职位:
第三点是,它可能会迫使您在标头中公开实现细节,例如,
如果没有内联,则只需要一个OtherObject的前向声明即可。与内联您 我不知道我的答案是否与问题有关,但: 内联虚拟方法要非常小心!一些错误的编译器(例如,Visual C ++的早期版本)会为虚拟方法生成内联代码,这些虚拟方法的标准行为是不做任何事情,而只继承继承树并调用适当的方法。 我对此表示怀疑。甚至编译器也会自动内联某些函数以进行优化。 内联较大的函数可以使程序更大,从而导致更多的高速缓存未命中并使其速度变慢。 确定何时函数足够小以内联将提高性能非常困难。 Google的C ++样式指南建议仅内联10行或更少行的函数。 您还应该注意,内联关键字只是一个请求。编译器可能选择不内联它,同样,如果编译器认为速度/大小的折衷是值得的,则可以选择使未定义为内联的函数内联。 通常,此决定是基于许多因素做出的,例如在优化速度(避免调用函数)和优化大小(内联会导致代码膨胀,因此对于大型重复使用的函数而言不是很大)之间进行设置。
使用VC ++编译器,您可以使用
一般而言: 内联函数的其他问题(我已经看到过分使用过(我见过500行的内联函数)),您需要注意的是:
我工作的编码标准将内联函数限制为简单的setter / getter,特别是说析构函数不应为内联,除非您进行性能测量以显示内联具有明显的优势。 函数过多的内联会增加编译后的可执行文件的大小,这可能会对缓存性能产生负面影响,但如今,编译器自行决定对函数进行内联(取决于许多条件),而忽略inline关键字。 正如其他人所说的那样,如果代码很大,则内联函数可能会产生问题。由于每条指令都存储在特定的内存位置中,因此内联函数的重载会使代码花费更多的时间被淘汰。 在其他情况下,内联可能不起作用 |
最新内容
相关内容
linux判断大小端命令?
linux判断大小端命令?,地址,工作,代码,地方,设计,命令,目录,标准,系统,文件,Linux下的命令linux常用命令:查看内核版本:uname-a。图形界面:init5linux查看函数命令?
linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,linux下有没有像查看函数那样直接使用man命令来查看结构体的命令?这linux中分命令大小写?
linux中分命令大小写?,系统,工作,地址,大小写,命令,目录,管理,名称,信息,文件名,Linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出linux有什么好玩命令?
linux有什么好玩命令?,地址,系统,工作,信息,命令,环境,管理,做好,时间,衍生,linux酷炫的命令怎么安装你需要安装 Perl 的 curses 包和 Term:Ani调用函数命令linux?
调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎么调用system函数,使用Android的linux命令1、int system(const chlinux命令行字体大小?
linux命令行字体大小?,系统,等级,图片,数字,工具,终端,字体,字符,图形界面,编辑,Linux命令行字符太小如何调大1、在命令模式下,将光标移动到将linux内存大小命令?
linux内存大小命令?,系统,情况,电脑,信息,工具,状态,命令,内存,环境,分析,Linux命令行查看内存1、cat /proc/meminfo查看linux系统内存大小的linux命令按大小排序?
linux命令按大小排序?,数字,地址,时间,工作,标准,系统,命令,信息,单位,软件,linuxsort命令列表从大到小排序完如何保存Linux sort命令参数:-b:忽linux命令显示总大小?
linux命令显示总大小?,系统,情况,信息,命令,单位,服务,第一,档案,大小,文件夹,linux查看CPU核数和内存大小命令?1、要查看CPU使用情况,可以使用linux查询函数命令?
linux查询函数命令?,系统,信息,名称,标准,函数,百度,代码,名字,最新,实时,Linux下查找一个函数在哪个库文件中1、默认状态下,gcc并不搜索数学库linux查看命令大小?
linux查看命令大小?,系统,档案,情况,大小,命令,名称,电脑,单位,地址,时间,linux命令如何查看文件属性大小1、当磁盘大小超过标准时会有报警提linux命令都有什么?
linux命令都有什么?,系统,工作,地址,信息,管理,命令,单位,标准,数据,目录,linux系统常用操作命令1、linux常用命令有pwd命令、cd命令、ls命令