ilia_rr's blog

By ilia_rr, 2 years ago, In English

Hi everybody!

This blog is about speeding up C/C++ compilers with precompiled headers.

Including lots of headers or big headers like bits/stdc++.h will increase compilation time. This can be annoying even with high speed processors. We can solve this using precompiled headers.

What are precompiled headers?

You can compile a header like stdc++.h to stdc++.h.gch and compiler will use it instead of compiling the header every time you are compiling your code. Less processing => Less time.

How to use precompiled headers?

  1. Find your g++ default include directory

    • Ubuntu: /usr/include/x86_64-linux-gnu/c++/{version}
    • Windows: C:\MinGW\lib\gcc\mingw32\{version}\include\c++
  2. Compile headers you need (I recommend using bits/stdc++.h instead of including lots of headers).

    g++ {header name} {flags you use when compiling a normal code}

  3. Put .gch files in the right place. You have 2 Options:

    • Put them in the directory you find the headers & use #include <header name>
    • Put them in your code directory & use #include "header name"

    I recommend first options because the second one will work only when .gch files are in the code directory and it takes a little extra time to search in code.

Compile a code and feel the difference!

Comment your issues or suggestions.

Be good and code fast ;)

  • Vote: I like it
  • +44
  • Vote: I do not like it

| Write comment?
»
2 years ago, # |
Rev. 3   Vote: I like it -49 Vote: I do not like it

plaese don't down bruh

»
2 years ago, # |
  Vote: I like it +5 Vote: I do not like it

My own experience:

I use precompiled stdc++.h in the default header directory and compile time decreased from 600ms to 100ms.

»
2 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Thanks for it. But it dont include windows.h library. Thanks already.

  • »
    »
    2 years ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    I think you can precompile it separately.

»
2 years ago, # |
Rev. 3   Vote: I like it -26 Vote: I do not like it

please don't down vote bruh

»
2 years ago, # |
  Vote: I like it +1 Vote: I do not like it

mine got improved from 2.376 seconds to 0.692 seconds, many thanks

»
2 years ago, # |
  Vote: I like it +5 Vote: I do not like it

Thanks for your helpful blog (◕ᴗ◕✿)

»
2 years ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

stdc++.h.gch file has been created in the same folder where the original stdc++.h file is. But still this isn't speeding up compilation. (I am using code runner extension on VS code.)

Am I missing something? :(

  • »
    »
    2 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Are you sure you found the right directory?

    Use g++ -xc++ -E -v - to find it.

    • »
      »
      »
      2 years ago, # ^ |
      Rev. 2   Vote: I like it 0 Vote: I do not like it

      The VS code extension is running a command g++ filename.cpp -o filename.exewhile compiling and running. So am I supposed to add -o as a flag in command given in the blog.

      Update : NVM, now it is taking 2 seconds to compile, previously it was taking 7-8 seconds. My laptop processor might be the bottleneck, coz it is too old. But yeah, I see this as an absolute win :)

»
2 years ago, # |
  Vote: I like it 0 Vote: I do not like it

If you don't want to clutter your system directories with .gch files that may become outdated, you can also precompile bits/stdc++.h, save the resulting .gch file where you prefer and add -include <gch file path, without .gch at the end> to your g++ command line.