[2227] Re:ポインタ完全制覇(第2版) Fig2-10とデバッグライト
投稿者:(ぱ)こと管理人
2020/02/05 23:13:49
>printf() の実装は実際のところ 2222 の debug_write() と全く同じことが多くて、
>よって printf() のクロック数と debug_write() のクロック数は全く同じで、
まず、「ポインタ完全制覇」での記載は、
#ifdef DEBUG
printf(表示したい内容);
#endif
という方法を
「こんなものをソース中に大量に埋め込んだら、読みにくくてしょうがありません。」
と書いたうえで、vfprintf()を使ったdebug_write()を紹介しています。
つまりdebug_write()の比較対象は、printf()ではなく、
#ifdefを使った完全に抹殺できるデバッグライトです。
>ついでに言うと printf() の処理中、文字化に要するクロック数と関数呼び出しクロック数では
>後者は無視できるほど小さいっす。
>さらに追加すると標準出力へ出力する際の実処理のクロック数のほうがもっと多い。
>ボトルネックでないところのクロック数を頑張って減らしても全体の速度は大差ない。
で、vfprintf()を使ったdebug_write()にて、フラグか何かを参照し、
デバッグモードでないときは即座にreturnするようにしたとしても、
関数呼び出しそのもののオーバーヘッドは消せない、というのが趣旨なので、
「関数呼び出しのオーバーヘッド」と、「文字化や出力のオーバーヘッド」を
比べているわけではありません。
ただまあ、そのうえで、関数呼び出しのボトルネックだって無視できるほど小さい、
というのは、まあそうだろうなとは思います。ことがデバッグライトだけに、
「本番では死ぬほどループする処理に、1行おきにデバッグライトを入れた」という
状況はもちろん考えられますが。