0
我的C代碼是:爲什麼C++在這段代碼中比C快得多?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char* a = (char*)malloc(200000);
for (int i = 0;i< 100000;i++){
strcat(a,"b");
}
printf("%s",a);
}
我的C++代碼是
#include <iostream>
int main(void){
std::string a = "";
for (int i = 0;i< 100000;i++){
¦ a+="b";
}
std::cout<<a;
}
在我的機器,C代碼中大約5秒運行一次,而我的機器上,C++代碼在0.025運行!秒。
現在,C代碼不檢查溢出,沒有C++開銷,類,但是比我的C++代碼慢了不少。
使用在Raspberry Pi上使用-O3編譯的gcc/g ++ 6.2.0。
可能是因爲'strcat()'是一個不會被內聯的庫函數,而'std :: string'是一個模板類的(專門化),所以操作是 - 取決於優化設置 - 更可能是內聯。還有一個事實是,您的C版本會動態分配比所需更大的緩衝區,並且根據系統上可用的資源,這可能會降低操作速度。請注意,您的C++代碼不能保證編譯,因爲''不需要定義'std :: string'。 –
Peter
我猜想C使用一個以空字符結尾的字符串,所以'strcat'搜索字符串的結尾。 C++字符串不需要這樣做,因此連接速度更快。 –
@ErwinKalvelagen哇。 Shlemiel的繪畫算法在工作 –