[C, C++] インクルードガード実装毎のベンチマーク

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

プログラミング言語C,C++では、CPPを用いたインクルードガードとして、#ifdefイディオムと#pragma once拡張が用いられる事が多い。規格に則った汎用性のためには#ifdefを使うべきだが、#pragma once拡張は多くのコンパイラでサポートされている

#ifdefイディオムを用いた場合、メモ化無しではファイル全体をパースし直す必要があるので、依存関係が巨大な時は極めて時間がかかるように思われる。少なくとも#pragma once拡張が遅い理由は無い。

そこで、これらのベンチマークが無いか探した所見つかった。この結果によると、MSVCでは#pragma onceがやや速いが、gccでは#ifdefの方がずっと速い(!)。Clangではほぼ変わらない。ただし、これらのベンチマークはVM上で取られており、IO帯域が狭くなっているため、絶対的な時間にはそれほど意味は無い。また、これらのベンチマークが取られたのは2011年である。

結論:そんな事を気にしている暇があったらコードを書くべきである。