C++字符串与C#字符串,不同的运行时间.为什么?
C++ string vs C# string, different running times. Why?
我正在用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++字符串中的一个糟糕的优化(我强烈怀疑tho)还是其他什么?
如果你想验证这个假设,试着用一个(明显)更长的字符串常量。C++中的运行时应该上升,但C#中的运行时间应该保持不变。
C#中的字符串是不可变的。C#使用引用和未复制的内存!在C#中,"你好!"将自动分配给一段内存,并且不会每次都被复制例如:
string a="你好";字符串b=a;
它们指向同一块内存,但在C++中没有!字符串将是相同的,但不在相同的位置,如果你想获得相同的重用,你应该使用指针(或智能指针)
string*a=新字符串("你好");字符串*b=a;
相关文章:
- KMP算法和LPS表构造的运行时间
- 如何计算Big-O表示法中的平均渐近运行时间
- 用时钟测量程序的运行时间
- 如何减少代码的运行时间以对齐文本?
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 使用 Qt 测量过程的实际运行时间
- 如何执行用 C++ 编写的程序的运行时间?
- 无限运行时间
- 如何优化C++键值程序以获得更快的运行时间
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 重复值的最长运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 字符串连接时间复杂度 c++
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- variadic函数模板:基于n编译时值在运行时间自动n输入
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- C 获得运行时间和内存使用量
- C++字符串与C#字符串,不同的运行时间.为什么?