【发布时间】:2014-12-24 06:55:17
【问题描述】:
Bjarne Stroustrup 和其他专家表示,在处理 Bjarne Stroustrup' article 和 my previous question 中的短字符串时,C++ 比 C 更快
但在我的测试中,C++ 比 C 慢了大约 110%。
g++ 版本是 4.4.6(在 CentOS 6.3 上运行)。这是因为g++ 4.4.6 少了Rvalue Reference (move semantics)之类的c++11特性吗?
测试结果
$ time a.out input_file 的输出减去不调用 compose_X() 函数的执行时间
- cpp 版本:0.192 秒
- C 版本:0.091 秒
源代码
用-O2编译
编辑
compose_cpp() 和 compose_p() 来自 Bjarne 的文章。他说compose_cpp()比compose_p()胖。我想通过实际测试来验证这个事实。
如果我测试的方式不对,我该如何改进测试?
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
std::string compose_cpp(const std::string& name, const std::string& domain)
{
return name + '@' + domain;
}
char* compose_c(const char* name, const char* domain)
{
char* res = (char*) malloc(strlen(name)+strlen(domain)+2);
char* p = strcpy(res,name);
p += strlen(name);
*p = '@';
strcpy(p+1,domain);
return res;
}
int main(int argc, char* argv[])
{
std::ifstream ifs;
ifs.open(argv[1]);
std::string email, domain;
while (ifs.good())
{
ifs >> email;
ifs >> domain;
// std::string composed = compose_cpp(email, domain);
char* composed = compose_c(email.c_str(), domain.c_str());
free(composed);
}
ifs.close();
}
输入文件
输入文件的长度为 1 百万行。每行小于20字节,随机生成。
$ head -n 10 input.txt.1m
9742720 1981857.com
22504 4127435.com
342760 69167.com
53075 26710.com
3837481 1851920.com
98441 278536.com
4503887 9588108.com
193947 90885.com
42603 8166125.com
3587671 297296.com
【问题讨论】:
-
你也试过
-O3吗? -
你最近在 5 个关于 C++ 的神话 中看到了这个。
-
0.402、0.299 分别用于 c++、c。
-
@InoSHeo 你测量的怎么样?
-
@InoSHeo 我之前问过“你是如何测量的”,你似乎忽略了我的问题。这对于其他复制相同结果的人来说是不可或缺的。
标签: c++