clang ++ fstreams比g ++慢{10}

时间:2016-07-27 22:51:33

标签: c++ performance g++ fstream clang++

问:有没有办法加速clang ++ STD Library fstreams? (并且有人知道为什么它比g ++慢得多吗?)

我正在尝试处理非常大(很多GB)的二进制数据文件,并且惊讶地发现性能非常差。起初,我认为这与我的代码有关。但是我在一个简单的例子中看到同样缓慢的表现。

我甚至尝试通过rdbuf() - > pubsetbuf()分配不同大小的缓冲区,但这似乎没有太大作用。

这是一个简单的输入/输出示例:

#include <fstream>

int main() {
    std::ifstream is {"bigSourceFile"};
    std::ofstream os {"bigSourceFileCopy"};

    std::string line;
    while (std::getline (is, line) ) {
        os << line;
    }
}

以下是生成1.3GB源文件的一些代码。使用它来生成readWrite程序的源文件:

#include <fstream>
#include <string>

std::string createTailStr () {
    std::string result {"__"};
    for (auto i (0); i< 58; ++i) {
        result += 'A'+i;
    }

    return result;
}

int main() {

    std::string tail {createTailStr()};

    std::ofstream os {"bigSourceFile"};

    constexpr auto Lines (20000000ul);
    for (auto i (0); i < Lines; ++i) {
        os << i << tail << '\n';
    }
}

在我的机器上(运行OSX El Capitan和最新的Xcode):示例(第一个代码清单)采用aprox。从命令行运行编译50秒:

clang ++ -std = c ++ 11 -o readWrite readWrite.cpp

但是,在编译g ++及其libstdc ++时,程序只需要大约5秒钟。

我甚至从llvm.org构建了llvm stdc ++的最新剪辑,并且构建速度更慢(aprox 90秒)。

总结: clang ++:50秒; g ++:5秒

0 个答案:

没有答案