#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>
#include <windows.h>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
const char *pc = "a very long literal string";
const size_t len = strlen(pc); // space to allocate
// performance test on string allocation and copy
DWORD dw_now = GetTickCount();
for (size_t ix = 0; ix != 1000000; ++ix) {
char *pc2 = new char[len + 1]; // allocate the space
strcpy(pc2, pc); // do the copy
if (strcmp(pc2, pc)) // use the new string
; // do nothing
delete []pc2; // free the memory
}
cout<<GetTickCount()-dw_now<<endl;
string str("a very long literal string");
// performance test on string allocation and copy
dw_now = GetTickCount();
for (int ix = 0; ix != 1000000; ++ix) {
string str2 = str; // do the copy, automatically allocated
if (str != str2) // use the new string
; // do nothing
}
cout<<GetTickCount()-dw_now<<endl;
return 0;
}
结果 c的 1688 std 的 953.
9 个解决方案
#1
多换几个编译器再试。
#2
不懂!
#3
最优化的肯定是c高
但一般代码优化程度没string高
这里的string用了引用计数
但一般代码优化程度没string高
这里的string用了引用计数
#4
我用的VC6结果:
C:719
std:1109
C:719
std:1109
#5
我运行的结果正好相反.c 922, std 1625
#6
c++ primer page:139 exercise 4.29
#7
4th edition
#8
编译器原因,被primer欺骗了
#9
string str2 = str; // do the copy, automatically allocated
或许这里并没有分配内存...并没有拷贝字符串的动作...COW
或许这里并没有分配内存...并没有拷贝字符串的动作...COW
#1
多换几个编译器再试。
#2
不懂!
#3
最优化的肯定是c高
但一般代码优化程度没string高
这里的string用了引用计数
但一般代码优化程度没string高
这里的string用了引用计数
#4
我用的VC6结果:
C:719
std:1109
C:719
std:1109
#5
我运行的结果正好相反.c 922, std 1625
#6
c++ primer page:139 exercise 4.29
#7
4th edition
#8
编译器原因,被primer欺骗了
#9
string str2 = str; // do the copy, automatically allocated
或许这里并没有分配内存...并没有拷贝字符串的动作...COW
或许这里并没有分配内存...并没有拷贝字符串的动作...COW