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的绘画算法在工作 –