重新审视C++中的大括号和性能

Revisit curly braces and performance in C++

本文关键字:性能 新审视 C++      更新时间:2023-10-16

我知道这个问题已经在这里被问过和回答过,但没有一个答案涉及我(几年前)因"不必要的"大括号对性能产生不利影响的原因。有鉴于此,我想重新审视这个问题。

简而言之,有人告诉我:

if(true) 
    do_something();

性能高于

if(true)
{
   do_something();
}

我记得给出的原因是,在第二种情况下,编译器会在组装的代码中引入一个分支,这可能会产生累积效应。

现在,我可以拼写成文器,但除此之外,我对它们的运作方式知之甚少,那么上述理论是正确的吗? 这是真的吗?

在未优化和优化生成的代码中,这两个语句将转换为完全相同的语句。大括号创建了一个新作用域,其中没有声明任何内容,因此从语义上讲,任何内容都不能以不同的方式实现。(除非一个愚蠢的编译器会管理这个内部块的空堆栈帧?!

那么上述理论是否属实呢?

不。

这是真的吗?

不。
即使最糟糕的古代编译器缺乏聪明的优化策略,我也无法想象这些语句会发出不同的断言代码。

这些将简单地作为对do_something子例程的调用发出。

你得到的"事实"完全是虚构的。正如人们在您提供的链接中已经提到的那样,根本没有性能降低。

我们没有办法解释不真实事物的推理。