【发布时间】:2014-06-12 11:46:56
【问题描述】:
我在用C++做实验,观察变量的作用域有界声明和循环中的使用对程序运行时间的影响,如下:
for(int i=0; i<10000000 ; ++i){
string s = "HELLO THERE!";
}
和
string s;
for(int i=0; i<10000000 ; ++i){
s = "HELLO THERE!";
}
第一个程序运行时间约为 1 秒,而第二个程序运行时间约为 250 毫秒,正如预期的那样。尝试内置类型不会造成显着差异,因此我坚持使用两种语言的字符串。
我正在和我的一个朋友讨论这个问题,他说这不会在 C# 中发生。我们自己尝试并观察到这在 C# 中并没有发生,因为事实证明,字符串的范围限制声明不会影响程序的运行时间。
为什么会有这种差异?这是 C++ 字符串中的糟糕优化(我强烈怀疑)还是其他什么?
【问题讨论】:
-
我很确定您在没有在 C++ 中启用优化的情况下进行了此测试。大多数 C++ 编译器都会删除整个代码块,因为它没有明显的副作用。
标签: c# c++ string immutability