c-style string 效率比 std::string 效率低,why?

时间:2021-07-31 22:26:04
c++primer 上面的一道题 ,不知道原因。

#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用了引用计数

#4


我用的VC6结果:
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

#1


多换几个编译器再试。

#2


不懂!

#3


最优化的肯定是c高
但一般代码优化程度没string高

这里的string用了引用计数

#4


我用的VC6结果:
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