加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 内联函数解决多定义是一个明确定义的东西吗?

发布时间:2020-12-16 10:36:09 所属栏目:百科 来源:网络整理
导读:我正在构建一个模板化标题的C 11库.正如我所读到的,我应该将我的成员函数定义为内联,以保证不会出现翻译单元中多个定义的存在. 这是内联关键字的明确定义使用吗?我以前认为内联是与性能相关的事情.我怀疑通过使用内联为此目的就像打开一个后门.使用它的任何
我正在构建一个模板化标题的C 11库.正如我所读到的,我应该将我的成员函数定义为内联,以保证不会出现翻译单元中多个定义的存在.

这是内联关键字的明确定义使用吗?我以前认为内联是与性能相关的事情.我怀疑通过使用内联为此目的就像打开一个后门.使用它的任何缺点?还有其他方法吗?

解决方法

Joachim的问题回答了关于内联语义的主要问题,但OP也询问了使用内联的缺点.执行内联时通常的权衡取决于代码大小和速度.我们有两种情况:

>该功能实际上是内联的.在这种情况下,正在复制正文,增加最终程序的代码大小.这还可能包括性能损失,因为将程序代码缓存在处理器高速缓存中变得更加困难.
>该函数未内联.我假设一个带有外部链接的内联函数.在这种情况下,链接器将删除除一个之外的所有副本,以确保函数的地址在整个程序中是唯一的.此过程可能会降低构建过程的速度.在msvc< = 2010上,这曾经是一个主要问题,因为链接器是单线程的并且死得很慢.
>必须在使用它们的每个编译单元中解析和编译内联函数.这可能会减慢构建过程.

更好的方法可能是使用整个程序优化,编译器可以在编译单元之间进行优化.所有主要编译器都支持这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读