相关疑难解决方法(0)

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

在C++中使用内联函数的优点/缺点是什么?我看到它只会提高编译器输出的代码的性能,但是使用今天的优化编译器,快速CPU,大容量存储器等(不像1980年那样<内存稀缺,一切都必须适合100KB内存)什么他们今天真的有优势吗?

c++ inline-functions

253
推荐指数
6
解决办法
17万
查看次数

可以使用哪些技术来加速C++编译时间?

可以使用哪些技术来加速C++编译时间?

这个问题出现在Stack Overflow问题C++编程风格的一些评论中,我很想知道它有什么想法.

我见过一个相关的问题,为什么C++编译需要这么长时间?,但这并没有提供很多解决方案.


这里投票有Visual Studio支持共享项目之间的预编译头

c++

239
推荐指数
17
解决办法
10万
查看次数

分析C++编译过程

我倾向于编写相当大的模板化标头C++库,我的用户通常会抱怨编译时间.在想到这件事之后,我突然意识到我不知道时间会在哪里.是否有一些简单的方法来使用常见的编译器(例如g ++,icc和xlC)来分析C++编译过程?例如,是否可以了解在C++编译的每个阶段花费了多少时间?

c++ profiling compilation

75
推荐指数
5
解决办法
1万
查看次数

链接器内联函数可以吗?

在该文件中file1.c,调用在文件中实现的函数file2.c.当我链接file1.o,并file2.o为可执行文件,如果该功能file2是非常小的,将连接器自动检测功能小,内联呼吁?

c optimization linker inline

43
推荐指数
1
解决办法
1万
查看次数

GCC内联C++是否在没有'inline'关键字的情况下运行?

在编译C++代码时,GCC是否会尝试通过选择未标记inline关键字的内联函数来优化速度?

c++ optimization gcc inline optimizer-hints

30
推荐指数
2
解决办法
1万
查看次数

常见的C++优化技术列表

我可以获得一系列常见的C++优化实践吗?

我的意思是优化是你必须修改源代码才能更快地运行程序,而不是改变编译器设置.

c c++ optimization gcc g++

22
推荐指数
5
解决办法
3万
查看次数

解析C++源代码并将标题内联方法移动到.cpp源文件的工具?

我们的应用程序的源代码是数十万行,数千个文件,并且在非常古老的地方 - 该应用程序最初是在1995年或1996年编写的.在过去的几年里,我的团队已经大大提高了源代码的质量,但是一个问题仍然是特别困扰我:许多类在其头文件中完全定义了许多方法.

在某些情况下,我对在头文件中内联声明的方法没有任何问题 - 一个struct的构造函数,一个简单的方法,其中内联可以使它更快(我们有一些像这样的数学函数),等等.但内联方法的自由使用没有明显原因是:

  • 很难找到方法的实现(特别是在类的树中搜索虚函数,只发现一个类在头中声明了它的版本......)
  • 可能会增加编译的代码大小
  • 可能会导致我们的链接器出现问题,这对于大型代码库而言众所周知的.公平地说,它在过去几年里变得更好,但它并不完美.

最后一个原因现在可能会给我们带来问题,这是通过代码库并将大多数定义移动到源文件的一个很好的理由.

我们的代码库非常庞大. 是否有可以为我们(大部分)做这个的自动化工具?

笔记:

  • 我们使用Embarcadero RAD Studio 2010.换句话说,C++的方言包括VCL和其他扩展等.
  • 一些标题是独立的,但大多数标题与相应的.cpp文件配对,就像通常那样.除了扩展名之外,文件名是相同的,即,如果在Xh中定义了方法,则可以将它们移动到X.cpp.这也意味着该工具不必处理整个项目的解析 - 它可能只是解析各个.cpp/.h文件对,忽略包含等,只要它能够可靠地识别定义了主体的方法在一个类声明中移动它.

c++ refactoring inline c++builder automated-refactoring

11
推荐指数
1
解决办法
2881
查看次数

gcc 5.1中的链接时间优化是否足以放弃内联简单函数?

出于习惯,我经常为简单的函数内联函数定义,例如这个(人为的例子)

class PositiveInteger
{
private:
    long long unsigned m_i;
public:
    PositiveInteger (int i);
};

inline PositiveInteger :: PositiveInteger (int i)
: m_i (i)
{
    if (i < 0)
        throw "oops";
}
Run Code Online (Sandbox Code Playgroud)

我一般喜欢分离界面文件和实现文件,但是,这是我习惯于那些我脑子里的声音告诉我的热门可能会受到很多打击的功能.

我知道这个建议是"简介第一"并且我同意但是如果我事先知道编译器会生成相同的最终目标代码,无论是否在编译或链接时内联这些函数,我都可以避免一大堆分析工作.(另外,我相信注入的性能分析代码本身会导致时序的变化,从而影响非常简单的函数的效果,例如上面的那个.)

GCC 5.1刚刚发布了广告LTO(链接时间优化)的改进.他们真的有多好?知道最终可执行文件的哪些功能可以安全地内联不会受到影响?

c++ gcc

5
推荐指数
1
解决办法
394
查看次数

内联速度和编译器优化

我正在做一些关于制作内联函数的速度优势的研究.我没有这本书,但是我正在阅读的一篇文章暗示了进行函数调用需要相当大的开销; 当可执行文件的大小可以忽略不计,或者可以保留时,应该内联函数声明一个函数,以提高速度.

我已经编写了下面的代码来测试这个理论,从我所知道的,将内联函数声明为没有速度的好处.这两个函数在我的计算机上调用4294967295次时,在196秒内执行.

我的问题是,你对于为什么会这样做有什么想法?是现代编译器优化吗?是否缺乏功能中发生的大量计算?

任何有关此事的见解将不胜感激.在此先感谢朋友们.

#include < iostream >
#include < time.h >

// RESEARCH                                                   Jared Thomson 2010
////////////////////////////////////////////////////////////////////////////////
// Two functions that preform an identacle arbitrary floating point calculation
// one function is inline, the other is not.

double test(double a, double b, double c);
double inlineTest(double a, double b, double c);

double test(double a, double b, double c){
    a = (3.1415 / 1.2345) / 4 + 5;
    b = 9.999 / a + (a * a);
    c = …
Run Code Online (Sandbox Code Playgroud)

c++ optimization inline visual-studio-2008 visual-studio

3
推荐指数
1
解决办法
5055
查看次数

将内联方法从头文件移动到.cpp文件

我在foo.h头文件中定义了以下类

class Foo {

public:
    inline int Method();

};

inline int Foo::Method() { // Implementation }
Run Code Online (Sandbox Code Playgroud)

我现在想将实现移动到一个foo.cpp文件.为此,我必须删除inline关键字并将方法的实现移动到这样的foo.cpp文件

#include `foo.h`

inline int Foo::Method() { // Implementation }
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 我关于删除inline关键字的声明是否正确?是否必须删除?
  2. 通常删除inline关键字会影响性能(实际上我的所有方法都是内联的)?

非常感谢你提前.

c++ methods class

3
推荐指数
3
解决办法
6137
查看次数