Why is printf too slow in C++17(64bit)?

Revision en5, by Hyado, 2020-08-11 15:21:13

I got stuck in 102253L - Limited Permutation because of slow printf (´・_・`)

Does anyone know why printf is much slower than cout in C++17(64bit)?

I measured execution time in Custom Test

printf

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, a, n) for(ll i = a; i < n; ++i)
int main() {
  ll n = 10000000;
  rep(i, 0, n) printf("%d ", n);
}
  • 3587 ms(GNU C++17 9.2.0 (64bit,2msys))
  • 1996 ms(GNU C++17 7.3.0)

cout

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, a, n) for(ll i = a; i < n; ++i)

int main() {
  ll n = 10000000;
  rep(i, 0, n) cout << 1000000 << " ";
}
  • 1138 ms(GNU C++17 9.2.0 (64bit,2msys))
  • 1544 ms(GNU C++17 7.3.0)

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en5 English Hyado 2020-08-11 15:21:13 165 (published)
en4 English Hyado 2020-08-11 15:18:55 108 Tiny change: 'ecause of too slow printf.\n\nI meas' -> 'ecause of printf (´・_・`)\n\nI meas'
en3 English Hyado 2020-08-11 15:13:50 378 Tiny change: 'tom Test\n\n\n~~~~' -> 'tom Test\n=============================\n\n\n~~~~'
en2 English Hyado 2020-08-11 15:04:59 103 Tiny change: 'it,2msys)) \n\n1996 m' -> 'it,2msys))\n\n1996 m'
en1 English Hyado 2020-08-11 14:59:11 887 Initial revision (saved to drafts)