我有一個關於複製一個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