将变量声明移到循环之外真的会提高性能吗?
我正在编写非常处理器密集型的加密代码 (C#),因此我正在寻找任何性能提升,无论多么小。我听到过关于这个问题的两种观点。
对此有任何性能优势吗
int smallPrime, spGen;
for (int i = 0; i < numSmallPrimes; i++)
{
smallPrime = smallPrimes[i];
spGen = spHexGen[i];
[...]
}
?
for (int i = 0; i < numSmallPrimes; i++)
{
int smallPrime = smallPrimes[i];
int spGen = spHexGen[i];
[...]
}
编译器已经这样做了吗?
I'm writing very processor-intensive cryptography code (C#), so I'm looking for any performance gains, no matter how small. I've heard opinions both ways on this subject.
Is there any performance benefit at all to
int smallPrime, spGen;
for (int i = 0; i < numSmallPrimes; i++)
{
smallPrime = smallPrimes[i];
spGen = spHexGen[i];
[...]
}
over this?
for (int i = 0; i < numSmallPrimes; i++)
{
int smallPrime = smallPrimes[i];
int spGen = spHexGen[i];
[...]
}
Does the compiler do this already?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根本没有任何性能优势。
所有局部变量都是在创建方法的堆栈帧时分配的,因此在方法中的何处声明它们并不重要。只是代码之间的变量范围有所不同,而且这只是编译器在编译时使用的信息。
编辑:
为了验证没有区别,我编译了这两种情况并检查了生成的机器代码,这两种情况是相同的:
在循环外声明变量:
在循环内声明变量:
There is no performance benefit at all.
All local variables are allocated when the stack frame for the method is created, so it doesn't matter where in the method you declare them. It's only the scope of the variables that differ between the codes, and that is only information that the compiler uses at compile time.
Edit:
To verify that there is no difference, I compiled the two cases and examined the generated machine code, and it is identical for the two cases:
Declaring variables outside the loop:
Declaring variables inside the loop:
不是真的,编译器会为你做优化。
Not really, the compiler will do that optimization for you.