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;
}