Emr*_*reS 4 variables performance location scope definition
我想知道下面的代码对于性能有什么区别吗?例如,有三个变量,每个变量都定义了何时使用。
bool myFunc()
{
string networkName;
if ( !Parse(example, XML_ATTRIBUTE_NAME, networkName) )
{
return false;
}
BYTE networkId;
if ( !Parse(example, XML_ATTRIBUTE_ID, networkId) )
{
return false;
}
string baudRate;
if ( !Parse(example, XML_ATTRIBUTE_BAUDRATE, baudRate) )
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
上面和下面的代码在性能方面有什么区别吗?
bool myFunc()
{
string networkName;
string baudRate;
BYTE networkId;
if ( !Parse(example, XML_ATTRIBUTE_NAME, networkName) )
{
return false;
}
if ( !Parse(example, XML_ATTRIBUTE_ID, networkId) )
{
return false;
}
if ( !Parse(example, XML_ATTRIBUTE_BAUDRATE, baudRate) )
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
建议的做法是将声明尽可能靠近使用变量的第一个位置。这也最小化了范围。\n摘自Steve McConnell 的《Code Complete》一书:
\n\n\n理想情况下,声明和定义每个变量应靠近首次使用的位置。声明建立变量\xe2\x80\x99s 类型。定义为变量分配特定值。在支持它的语言中,例如 C++ 和 Java,变量的声明和定义应靠近首次使用的位置。理想情况下,每个变量应该在声明的同时定义。
\n
然而,很少有资料来源建议将声明放在块的开头 ( {})。\n来自过时的 Java 代码约定:
\n仅将声明放在块的开头。(块是由大括号“{”和“}”包围的任何代码。)不要等到第一次使用变量时才声明它们;它可能会让粗心的程序员感到困惑并妨碍代码在范围内的可移植性。
\n
仅在函数顶部声明变量被认为是不好的做法。将声明放在最本地的块中。
事实上,这取决于。声明 POD 类型根本不应该影响性能:所有局部变量的内存都是在调用函数时分配的(C、JavaScript、ActionScript...)。
请记住,编译器会优化您的代码,因此我猜非 POD 类型也不会成为问题 ( C++)。
通常选择声明变量的位置是一种过早的优化,因此性能在这里并不重要,因为它的微观提升(或开销)微不足道。主要的争论仍然是代码的可读性。
C99在(语言)标准之前C,必须在块的开头声明变量。