我有一个关于复制一个0结尾的字符串的问题:更快的方式比的memcpy复制0结尾的字符串
const char * str = "Hello World !";
size_t getSize = strlen(str);
char * temp = new char[getSize + 1];
...我知道我可以使用此功能
memcpy(temp, str, getSize);
但我想用我自己的复制功能,有这样
int Count = 0;
while (str[Count] != '\0') {
temp[Count] = str[Count];
Count++;
}
两个办法的是真实的和成功的行动。现在我要检查它在10 milions倍和的memcpy做这个动作
const char * str = "Hello World !";
size_t getSize = strlen(str);
for (size_t i = 0; i < 10000000; i++) {
char * temp = new char[getSize + 1];
memcpy(temp, str, getSize);
}
,这是我自己的方式
const char * str = "Hello World !";
size_t getSize = strlen(str);
for (size_t i = 0; i < 10000000; i++) {
char * temp = new char[getSize + 1];
int Count = 0;
while (str[Count] != '\0') {
temp[Count] = str[Count];
Count++;
}
}
在420毫秒和第二完成第一过程完成650毫秒 ...为什么?这两种方式都是一样的!我想用我自己的函数而不是memcpy。有什么办法让我自己的方式更快(memcpy速度快,也许速度更快)? 我如何更新我自己的方式(while)使其更快或与memcpy相等?
完整的源
int main() {
const char * str = "Hello world !";
size_t getSize = strlen(str);
auto start_t = chrono::high_resolution_clock::now();
for (size_t i = 0; i < 10000000; i++) {
char * temp = new char[getSize + 1];
memcpy(temp, str, getSize);
}
cout << chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start_t).count() << " milliseconds\n";
start_t = chrono::high_resolution_clock::now();
for (size_t i = 0; i < 10000000; i++) {
char * temp = new char[getSize + 1];
int done = 0;
while (str[done] != '\0') {
temp[done] = str[done];
done++;
}
}
cout << chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start_t).count() << " milliseconds\n";
return 0;
}
结果:
482毫秒
654毫秒
你如何衡量执行时间? –
依靠数组末尾的“\ 0”字符,与“memcpy()”不同。如果你想处理这种情况,那么只有你用'strcpy()'才可能比使用自己的函数更好(实现中可能会使用某些技巧,使得它比实现更快)。 – user0042
为什么你认为你可以智取编译器标准库的创建者? – PaulMcKenzie