inline相关内容

内联函数与 C 中的宏 - 开销(内存/速度)是多少?

我搜索了 Stack Overflow 以了解类似函数的宏与内联函数的优缺点. 我发现了以下讨论:不同宏函数/内联方法的优缺点在 C ...但它没有回答我的主要问题. 也就是说,就内存使用和执行速度而言,在 c 中使用宏函数(带有变量,可能还有其他函数调用)与内联函数的开销是多少? 在开销方面是否存在任何依赖于编译器的差异?我可以使用 icc 和 gcc. 我正在模块 ..
发布时间:2021-12-20 16:13:29 其他开发

编译器什么时候内联 C++ 代码?

在 C++ 中,方法是否只有在显式声明inline(或在头文件中定义)时才会被内联,还是允许编译器按照他们认为合适的方式内联方法? 解决方案 是的,编译器可以内联代码,即使它没有显式声明为 inline. 基本上,只要语义不改变,编译器几乎可以对生成的代码做任何它想做的事情.该标准不会对生成的代码强制执行任何特殊操作. ..
发布时间:2021-12-20 16:00:14 C/C++开发

链接器可以内联函数吗?

在文件 file1.c 中,调用了在文件 file2.c 中实现的函数.当我将 file1.o 和 file2.o 链接成一个可执行文件时,如果 file2 中的函数很小,链接器会自动检测到函数很小并且内联了它的调用? 解决方案 除了 Jame McNellis 提到的对链接时间代码生成 (LTCG) 的支持之外,GCC 工具链还支持链接时间优化.从 4.5 版开始,GCC 支持 -flt ..
发布时间:2021-12-20 15:42:22 其他开发

C#中的内联函数?

如何在 C# 中执行“内联函数"?我不认为我理解这个概念.他们喜欢匿名方法吗?像 lambda 函数? 注意:答案几乎完全涉及内联函数,即“手动或编译器优化,用被调用者的主体替换函数调用站点".如果您对匿名(又名 lambda)函数感兴趣,请参阅@jalf 的回答 或 每个人都在谈论的“Lambda"是什么?. 解决方案 最后在 .NET 4.5 中,CLR 允许使用 MethodI ..
发布时间:2021-12-20 15:40:33 C#/.NET

如何强制 gcc 内联函数?

__attribute__((always_inline)) 是否强制 gcc 内联函数? 解决方案 是. 来自 文档 v4.1.2 来自文档最新 always_inline 通常,除非指定优化,否则不会内联函数.对于声明为内联的函数,即使未指定优化级别,该属性也会内联函数. ..
发布时间:2021-12-18 22:43:24 其他开发

如何告诉 gcc 不要内联函数?

假设我在源文件中有这个小函数 static void foo() {} 并且我构建了我的二进制文件的优化版本,但我不希望内联此函数(出于优化目的).有没有我可以在源代码中添加的宏来防止内联? 解决方案 你想要 gcc 特定的 noinline 属性. 这个函数属性防止从被考虑的功能内联.如果函数没有有副作用,有除了内联之外的优化导致函数调用被优化离开,虽然函数调用是居住.为了防止 ..
发布时间:2021-12-18 22:33:53 其他开发

GHC 真的可以从不内联 map、scanl、foldr 等吗?

我注意到 GHC 手册说“对于自递归函数,循环断路器只能是函数本身,因此始终忽略 INLINE 编译指示." 这不是说map、zip、scan*、fold*、sum 等不能内联? 当你使用它们时,你总是可以重写所有这些函数,添加适当的严格标签,或者使用像“流融合"推荐的花哨技术此处. 然而,这一切不是极大地限制了我们编写既快速又优雅的代码的能力吗? 解决方案 确实,GHC ..
发布时间:2021-12-14 12:29:51 其他开发

将 inline 关键字与模板一起使用是否有意义?

由于模板是在头文件中定义的,并且编译器能够确定内联函数是否有利,这是否有意义?我听说现代编译器更了解何时内联函数,而忽略了 inline 提示. 编辑:我想接受这两个答案,但这是不可能的.为了结束这个问题,我接受了 Sebastian Mach 的回答,因为它获得了最多的选票,而且他在形式上是正确的,但正如我在评论中提到的,我认为 Puppy 和从不同的角度来看,组件 10 的答案也是正确的 ..
发布时间:2021-12-13 18:21:17 C/C++开发

如何编写内联if语句进行打印?

仅当布尔变量设置为 True 时,我才需要打印一些东西.因此,在查看了 this 后,我尝试了一个简单的例子: >>>一 = 100>>>b = 真>>>如果 b 打印 a文件“",第 1 行如果 b 打印 a^语法错误:无效语法 同样的事情,如果我写print a if b==True. 我在这里遗漏了什么? 解决方案 Python 没有没有尾随if 语句. Pyth ..
发布时间:2021-12-12 13:12:17 Python

是“内联"吗?隐含在类定义中定义的 C++ 成员函数中

根据 C++ 规范,以下两个类是否等价定义? A 类{无效 f(){}};B级{内联 void f(){}}; 即,将“内联"限定符放在类定义中定义的此类成员函数上是否完全多余? 后续问题:假设它是多余的,对于代码风格,保留“内联"标签是否明智,因此未来的开发人员意识到应该内联该函数,并且不会删除其他地方的定义并删除内联? 谢谢:) 解决方案 它们是等价的类定义,除了单一定 ..
发布时间:2021-12-09 21:46:07 C/C++开发

内联还有用吗?

我相信,inline 已经过时了,因为我阅读了这里: 无论您如何将函数指定为 inline,编译器都可以忽略该请求:编译器可能会内联扩展您调用的部分、全部或不扩展指定为 inline 的函数. 然而,Angew 似乎理解了一些我不理解的东西.在这个问题中他和我来回走了不少弯路,关于inline是否还在有用. 这个问题不是关于: 的问题 inline 的历史使用或 inline ..
发布时间:2021-12-07 23:41:35 C/C++开发

.cpp 文件中的 C++ 内联成员函数

我知道根据定义内联成员函数应该进入标题.但是如果无法将函数的实现放入头文件中怎么办?让我们来看看这种情况: 文件 A.h #pragma once#include "B.h"A类{乙乙;}; 文件 B.h #pragma onceA级;//前向声明B类{内联一个 getA();}; 由于循环包含,我必须将getA的实现放入 B.cpp #include "B.h"#inclu ..
发布时间:2021-12-07 23:17:40 C/C++开发

内联函数联动

我无法理解以下行为:一个标头具有一些基本类型,另一个标头在多个函数中使用这些类型.之后我开始根据我定义的类型和函数构建类.如果我留下以下签名,则在函数头中: void nothingFunction(参数) 链接器指出whateverFunction有多个定义.现在,如果将其更改为: inline voidwhateverFunction(parameters) 链接问题消失了,所有编译和 ..
发布时间:2021-12-07 23:15:45 C/C++开发

在电子邮件中发送内嵌图像

通过电子邮件将图像作为嵌入图像发送到正文时出现问题.图像文件显示为附件,没问题,但内嵌图像部分仅显示为红色 x. 这是我目前所拥有的 LinkedResource inline = new LinkedResource(filePath);inline.ContentId = Guid.NewGuid().ToString();MailMessage 邮件 = new MailMessag ..
发布时间:2021-12-07 10:07:45 C#/.NET

什么时候使用内联函数,什么时候不使用?

我知道内联是对编译器的提示或请求,用于避免函数调用开销. 那么根据什么可以确定一个函数是否适合内联呢?在哪种情况下应该避免内联? 解决方案 避免函数调用的成本只是故事的一半. 做: 使用 inline 而不是 #define 非常小的函数非常适合内联:更快的代码和更小的可执行文件(更多机会留在代码缓存中) 这个函数很小并且经常被调用 不要: 大型函数:导致 ..
发布时间:2021-12-02 08:27:41 C/C++开发