[英]printf vs cout performance
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;
}
}
環境 : C++, VS 2010, Windows 7, 32-bit, Core-i7, 4GB, 3.40 GHz
我用count = 10000
測試了這兩個函數,每個函數5
次。 使用QueryPerformanceCounter
測量性能。
perfprint
> ~850
毫秒(平均 5 次運行)
perfcout
> ~9000
毫秒(平均 5 次運行)
這是否意味着printf
比cout
快~10x
?
編輯:
使用 /Ox、/Ot,在發布版本中沒有調試信息
和std::ios_base::sync_with_stdio(false);
在perfcout
方法中,結果與cout
相同,即~9000 millisecs
編輯2:
總而言之, cout
比printf
快。 上述觀察的原因是由於控制台輸出。 將輸出重定向到文件時,事情發生了翻天覆地的變化!
我不再安裝 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";
}
關閉優化后, cout
顯示得稍微快一些(例如,358 毫秒與printf
460 毫秒),但在關閉優化的情況下測量速度相當沒有意義。
啟用優化后, cout
以更大的優勢獲勝(191 毫秒對printf
365 毫秒)。
為了使這些有意義,我將它們全部運行,並將輸出重定向到一個文件。 沒有它,基本上你要測量的只是控制台驅動程序的速度,這基本上毫無意義和價值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.