【问题标题】:Performance difference between "int a, b;" and "int a; int b;"?"int a, b;" 之间的性能差异和“int a;int b;”?
【发布时间】:2018-10-28 14:14:32
【问题描述】:

正如标题所说,这是一个很容易描述的问题。

每次我可以将两个单独的语句放在一个块中时,我都会想到这个问题。特别是当我为诸如 NP 完全问题之类的 CPU 成本问题编写代码时。

是否有必要将两个单独的语句组合在一起?

【问题讨论】:

  • runtime 完全没有区别。可能在编译时受到很小的影响,但可以忽略不计。
  • 无。这是一个 style 问题,而不是性能问题。遵循您小组的编码指南。还可以考虑问“是否有必要合并两个单独的语句?”
  • 两者都是 noop,因为int 类型不需要初始化。
  • 编译器将为两者生成完全相同的代码(如果它生成任何代码)。这些指令很可能只是告诉编译器为以后使用变量的实际指令留出多少内存。

标签: c++ c compilation compiler-construction compiler-optimization


【解决方案1】:

“int a, b;”之间的性能差异和“int a; int b;”?

这些声明在语义上是等价的,没有任何理由会生成与另一个不同的程序,因此也没有理由会在性能上有所不同。

但是,第一个声明短了几个字符,因此编译过程可能比从磁盘加载源文件所需的时间快几微秒。

是否有必要将两个单独的语句组合在一起?

一般来说不会。

【解决方案2】:

正如其他人所说,两者都是等效的声明。一个可能比另一个编译得稍微快一些。

它们都是声明
声明可以在运行时通过在内存中分配空间(例如在堆栈上)、保留寄存器或忽略来实现。

如果编译器为变量分配发出指令,则处理时间可以忽略不计(以纳秒或微秒为单位)。

在考虑性能时,您的第一个检查列表项应该是(按以下顺序):

  1. 要求 - 消除要求可以加快程序的运行速度。
  2. 设计 - 高效算法,去除变量,高效 接口
  3. 实现(编码) - 算法的高效编码。
  4. 编译器优化级别 -- 设置编译器优化级别 最高。
  5. 平台特定技巧——使用特殊处理器算法, 硬件支持等。

通常,客户宁愿使用速度较慢但质量较高的程序,也不愿使用真正快速但不可靠的程序。
利益相关者宁愿让程序开发得更快,也不愿为没有高投资回报 (ROI) 的优化付费。

专注于质量和稳健性。仅在必要时进行优化。

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2014-10-19
    • 2019-12-18
    • 2010-10-11
    • 1970-01-01
    • 2017-01-21
    • 2012-03-06
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多