とりあえず
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倍となる。