とりあえず

https://gist.github.com/tanakamura/7297025
この時点(fputs相当)で 2.5[nsec/byte] (1nsec = 1e-9sec)。

既にWriteFileのスループット出てないな。キャッシュ載ってるだろうからこんなもんか。

  • WriteFile 抜く : 1.4[ns/b]
  • memcpy 抜く : 1.8[ns/b]
  • 両方抜く : 0.6[ns/b]

ループ全体(640x480)だと

  • ふつうにsumだけ呼ぶ : 211 usec
  • sum + isdigit : 580 usec
  • fast_printf : 12800 usec
  • memcpy 抜く : 9000 usec
  • WriteFile 抜く : 7000 usec
  • WriteFile と memcpy 抜く : 3500 usec
  • strlen : 3000 usec

まあ

  • memcpy : 30%
  • strlen : 24%
  • writefile : 46%

ぐらいか


なんらかのマジックでstrlenが消せるとすると、memcpyにも最適化が入って(VCだとmovqの連続になる)、 1.3[nsec/b]。


まあバッファリング一回の理論値がこのへんか。もとのprintfが16.5[nsec/b]ぐらいなので、このぐらい出せるとprintfの10倍となる。