我有一个关于复制以 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++;
}
两种方式都是真实的和成功的。现在我想检查 1000 万次并为 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 很快或者可能更快)?我如何更新自己的方式(同时)以使其更快或与 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 毫秒