9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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

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

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

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?