草庐IT

c++ - 我的通用模板应该使用 T 还是 T&&?

我正在处理一个文件,该文件具有给定函数和许多重载,如下所示:inlineXf(ScriptWrappable*impl,Yy,Zz){...}inlineXf(Node*impl,Yy,Zz){...}inlineXf(RawPtrimpl,Yy,Zz){...}inlineXf(constRefPtr&impl,Yy,Zz){...}inlineXf(ScriptWrappable*impl,Yy,Zz){...}inlineXf(constString&impl,Yy,Zz){...}inlineXf(int64_timpl,Yy,Zz){...}templateinlineXf(

C++ 分析/优化 : How to get better profiling granularity in an optimized function

我正在使用谷歌的perftools(http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html)进行CPU分析——这是一个很棒的工具,帮助我对我的应用程序进行了大量的CPU时间改进。不幸的是,我已经到了这样的地步,代码仍然有点慢,当使用g++的-O3优化级别编译时,我所知道的是特定函数慢,但不知道它的哪些方面慢。如果我删除-O3标志,则程序的未优化部分会超过此函数,并且我无法清楚地了解函数的实际运行缓慢的部分。如果我保留-O3标志,那么函数的慢部分将被内联,我无法确定函数的哪些部分是慢的。有什么建议吗?感谢您

c++ - 函数所需的堆栈空间会影响 C/C++ 中的内联决策吗?

函数所需的大量堆栈空间会阻止它被内联吗?例如,如果我在堆栈上有一个10k的自动缓冲区,是否会降低函数被内联的可能性?intinlineme(intargs){charsvar[10000];returnstringyfunc(args,svar);}我更关心gcc,但icc和llvm也很高兴知道。我知道这并不理想,但我很好奇。代码在缓存上也可能很糟糕。 最佳答案 是的,内联与否取决于函数的复杂性、堆栈和寄存器的使用情况以及进行调用的上下文。这些规则依赖于编译器和目标平台。当性能很重要时,请始终检查生成的程序集。比较thisversi

c++ - 即使没有明确定义为内联,一个非常短的函数也可以内联吗?

我事先知道,在用C或C++编写程序时,即使我将函数声明为“内联”,编译器也可以随意忽略它并决定不在每次(或任何)调用时扩展它。反之亦然吗?也就是说,如果编译器认为这样做会带来性能提升,那么编译器是否可以自动内联未定义为内联的非常短的函数?另外两个子问题:此行为是否在ANSI标准的某处定义?在这方面,C与C++是不同的,还是它们的行为相同? 最佳答案 inline对于函数是否会被编译器内联没有约束力。这本来就是它打算做的。但从那时起,人们意识到函数是否值得内联取决于函数本身和调用站点,最好由编译器来决定。来自https://en.cp

c++ - 无法使用内联功能的时间

我正在研究C++中的内联函数,并且已经谈到了有关其使用限制的部分。它说:Thecompileralsocannotperforminliningiftheaddressofthefunctionistakenimplicitlyorexplicitly.有人可以向我解释一下,或许可以举个例子,这到底是什么意思? 最佳答案 您可以将任何函数标记为内联。即使是一个虚函数,甚至是递归函数,甚至是一个非常长的函数,即使它的地址被占用。内联函数和非内联函数的主要区别在于前者的定义必须出现在使用它的每个翻译单元(又名源文件)中(这就是为什么内联

c++ - 未命中内联函数中的断点

我有一个以下列方式声明的类:#ifndefMYCLASS_H#defineMYCLASS_HclassMyClass:publicMyOtherClass{public:MyClass();inta()const{return_a;};intb()const{return_b;};private:int_a;int_b;};inlinebooloperator==(constMyClass&lhs,constMyClass&rhs){return(lhs.a()==rhs.a())&&(lhs.b()==rhs.b());}#endif我的问题是在重载的operator==中设置的任何

c++ - g++ 警告,使用了内联虚函数但未定义

我目前遇到g++问题警告我无法摆脱。我的代码运行良好,但此警告不断弹出:ChildModel.h:136:24:warning:inlinefunctionvirtualintChildModel::getLinkCost(constLink&)constusedbutneverdefined[enabledbydefault]我目前找到了thispost在S.O上,有同样的问题,但答案是特定于库的(定义了一些东西)所以它对我不起作用。我的代码如下:classModel{public:virtualinlineintgetLinkCost(Linkconst&link)const;};

c++ - 这是内联函数的有效用法吗?

假设我有这段代码(不要介意SecondsToMinutes和MinutesToHours是彼此的拷贝这一事实)inlinefloatSecondsToMinutes(floatseconds){returnseconds/60.0;}inlinefloatMinutesToHours(floatminutes){returnminutes/60.0;}inlinefloatHoursToDays(floatminutes){returnminutes/24.0;}inlinefloatSeconndsToHours(floatseconds){returnMinutesToHours(

c++ - 在 header 中定义函数是否总是使编译器将其视为内联?

我刚刚了解到,在类的头文件中定义一个C++函数会使该函数内联。但我知道将inline关键字放在函数旁边只是一个建议,编译器不一定会遵循它。这对于header定义的C++函数是否相同?独立C++函数和作为类一部分的C++函数在行为上是否存在差异? 最佳答案 “在类的头文件中定义一个c++函数使函数内联”那不是真的。在类定义中定义一个函数(也就是说,提供函数体而不只是一个声明)使其成为内联的。通过“使其内联”,我的意思是它与给它inline关键字相同。但是类定义不必在标题中,标题可以包含类定义以外的其他内容。所以在这个例子中,函数foo

c++ - 为什么允许内联函数操作私有(private)成员变量?

假设我有一个带有两个内联函数的类:classClass{public:voidnumberFunc();intgetNumber(){returnnumber;}private:intnumber;};inlinevoidClass::numberFunc(){number=1937;}我实例化该类并调用该类中的两个函数:intmain(){Classcls;cls.numberFunc();cout我知道这两个内联函数仍然是该类的成员,但我的理解也是内联函数体内的代码只是插入到它被调用的地方。看来,由于该插入,我不应该能够直接访问成员变量number因为,据我所知,main()中的代