void perfprint(unsigned int count)
{
char a[100] = "fosjkdfjlsjdflw0304802";
for(unsigned int i = 0;i<count;++i)
{
printf("%s", a);
}
}
void perfcout(unsigned int count)
{
char a[100] = "fosjkdfjlsjdflw0304802";
for(unsigned int i = 0;i<count;++i)
{
cout << a;
}
}
Run Code Online (Sandbox Code Playgroud)
环境:C++,VS 2010,Windows 7,32位,Core-i7,4GB,3.40 GHz
我测试了与功能count = 10000为5次,每次.使用测量性能QueryPerformanceCounter.
perfprint> perfprint毫秒(5次运行的平均值)
perfcout> ~850毫秒(5次运行的平均值)
这是否意味着printf perfcout比cout更快
编辑:
使用/ Ox,/ Ot,Release版本中没有调试信息
并用~9000在perfcout方法,结果是为相同printf,即~10x
编辑2:
总而言之,cout比快std::ios_base::sync_with_stdio(false);.上述观察的原因是由于控制台输出.当将输出重定向到文件时,事情开始转向!
我没有安装VS 2010,但是我在VS 2013和2015上做了一个快速测试.我稍微修改了你的代码以减少重复,并包括时间码,给出:
#include <iostream>
#include <cstdio>
#include <chrono>
#include <string>
template <class F>
int perf(F f) {
using namespace std::chrono;
const int count = 1000000;
char a[100] = "fosjkdfjlsjdflw0304802";
auto start = high_resolution_clock::now();
for (unsigned i = 0; i < count; i++)
f(a);
auto end = high_resolution_clock::now();
return duration_cast<milliseconds>(end - start).count();
}
int main() {
std::cerr << "cout: " << perf([](char const *a) { std::cout << a; }) << "\n";
std::cerr << "printf: " << perf([](char const *a) { printf("%s", a); }) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
关闭优化后,cout显示速度稍快一些(例如,358 ms与460相比)printf),但关闭优化后的测量速度毫无意义.
随着优化开启cout赢得了更大的利润(191毫秒对365毫秒printf).
为了保持这些意义,我将它们全部运行,并将输出重定向到文件.没有它,基本上你所测量的就是控制台驱动程序的速度,这基本上没有意义且毫无价值.
| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |