小编mpu*_*mpu的帖子

排序字符串向量:plain C vs idiomatic C++ 11

我目前正在尝试学习C++ 11及其奇特的功能.具体而言,我正在寻找高效率的通用性.所以我很高兴在C++ 11中编写了一个程序来对输入文件的行进行排序以测试我的新技能.由于C++编译器的内联和良好功能,我期望在这个小例子上获得高性能.为了得到我的程序有多快的提示,我使用该qsort函数在C中攻击了完全相同的程序,因为它是原始C,没有对该函数执行内联,并且我的比较函数被调用间接并且需要做两个间接到访问char *表示字符串的指针.

事实

然而,我对结果感到非常惊讶,C似乎比C++快4倍.在8Mb文件中,我得到以下结果:

$ g++ -O3 -std=c++11 -o sort sort.C
$ time ./sort < huge > /dev/null

real    0m0.415s
user    0m0.397s
sys     0m0.013s

$ cc -O3 -Wall -o sortc sort.c
$ time ./sortc < huge  > /dev/null

real    0m0.104s
user    0m0.097s
sys     0m0.010s

$ wc -l huge
140190 huge
Run Code Online (Sandbox Code Playgroud)

请注意,我试图尽可能公平,编译选项是相同的,我的C程序(稍后转储)的行为与C++程序相同:输入行的大小没有限制,输入数量没有限制线.

我还注意到,虽然我的C程序malloc几乎每个输入行调用一次,但C++程序的每个输入行的比例为10!

代码

以下是我用来比较的两个程序.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <memory>

int main () {
    typedef std::vector<std::string> svec;
    svec …
Run Code Online (Sandbox Code Playgroud)

c c++ sorting benchmarking c++11

22
推荐指数
4
解决办法
2075
查看次数

标签 统计

benchmarking ×1

c ×1

c++ ×1

c++11 ×1

sorting ×1