bits/stdc++.hをプリコンパイルしてコンパイルを高速化する

投稿日: 更新日:

環境💻

OS: Ubuntu 22.04
g++: 11.4

ヘッダーをプリコンパイルする

以下のディレクトリに移動してください。

cd /usr/include/x86_64-linux-gnu/c++/11/bits

そしてヘッダーファイルをプリコンパイルします。sudoで行う必要があります。

-std=や最適化オプションなどは普段使うものと必ず合わせてください。

sudo g++ -std=gnu++20 stdc++.h 

コンパイルが終了すればstdc++.h.gchというファイルが生成されます。

確認

コンパイル時に-Hオプションをつけてコンパイルします。この時、!がついていればプリコンパイルヘッダーが使用されています。その行にstdc++.h.gchの表記もあります。

$ g++ -std=gnu++20 -H tmp.cpp
! /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h.gch
 tmp.cpp

上手く行かない場合はプリコンパイル時のコンパイルオプションが異なる可能性があります。

また、他のヘッダーのincludeが影響する場合があります。例えば以下の場合は上手くいきません。

#include <atcoder/all>
#include <bits/stdc++.h>

bits/stdc++.hが上であればプリコンパイル済みヘッダが使用されます。

コンパイル時間比較

私の環境では

プリコンパイルなし:約1.4 s
プリコンパイルあり:約0.2 s

となりコンパイル時間が短くなりました。

コンパイルしたソースコードは以下の通りです。

#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << "Hello world!" << endl;
    return 0;
}

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人