多个相同类型的声明会影响编译时间吗?

Jon*_*one 7 c c++

我想知道声明相同类型的多个事物是否会影响编译时间,如下所示.

void a(),
     b(),
     c();
Run Code Online (Sandbox Code Playgroud)

VS

void a();
void b();
void c();
Run Code Online (Sandbox Code Playgroud)

mol*_*ilo 7

如果它完全没关系,我会感到惊讶,因为编译器将为这两种情况执行不同的代码,但是不可能猜出哪一种会更快,以及一种是否会比另一种更快.

如果有可能以任何有意义的方式衡量差异,我也会感到惊讶,因为它很可能永远不会超过几微秒的问题.

如果您在编译时遇到问题,则声明样式不是原因.


Jer*_*man 6

不明显.别担心.


Eri*_*hil 6

这个答案讨论了为什么建议的代码对编译时间没什么影响,其他答案目前都没有解决.

通常,现代编译器的一些基本结构是:

  • 有一个部分可以读取每个字符,将字符与简单模式匹配(例如"一系列字母和以字母开头的数字"或"+"或"/*text*/",并将这些字符打包成额外的标记数据(带有文本名称的标识符,类型为+的运算符,空格).这部分称为词法分析器.
  • 有一部分接收令牌并分析其句法结构.
  • 还有其他部分与我们无关.

分析语法结构的部分是这样的:当它a()在一个声明中识别时void a(),它会调用编译器中其他地方的例程,该例程注册a为带有类型的标识符function returning void.当a()识别,b()识别时和识别时,会发生这种情况c().

在这种情况下,重要的是,同样的事情发生既提出的代码序列:a(),b()c()都认可,和常规电话的同一序列是由注册这些标识符.从那时起,它们的处理是相同的.在典型的编译器,会有的方式没有什么区别a(),b()以及c()被处理.

这意味着编译器处理这些代码序列的唯一区别在于词法分析器和语法处理器.对于其中一个代码序列,还有一些字符和一些标记,因此代码序列可能需要稍长的处理时间.然而,随着今天计算机的速度,这段时间是微不足道的.

如果它们恰好影响处理器高速缓存中存储的内容或分配和释放的内存,则处理中的细微差异可能会产生级联效应.然而,这些都是偶然的,就像机械师在一辆车上工作并且碰巧将扳手移到不同的架子上一样,它会影响他们在下一辆车上工作需要多长时间,因为他们有走到架子上拿扳手.这只是偶然而非有意义的因果关系.