How do I find out where the compiler spends its time?

How do I find out where the compiler spends its time?

My build is too slow, I'm already using a RAMdisk for the VC++ temporary files and it doesn't make any difference. (I have an SSD, so I expected no difference.)

Most single C++ files in this project take approx. 2 seconds to compile which seems awful (as I also don't have any in-project parallelization because I'm using VS2005).

How can I optimize this? Don't optimize without profiling, but how do I profile the compiler?

Note: These were not really helpful:

  • Profiling the C++ compilation process
  • Displaying build times in Visual Studio? (It isn't completely without merit though ... if you do a single-file compilation, instead of the whole project, it will show the time taken for a single file: That way I see that quite some files here take more that 5 seconds, some even 10 sec when compiled stand-alone)

  • Let's add a good comment: Do you have lot's of templates? How large are your files on average? Do you checked on including only the minimum of necessary headers

    No, I did not. I could (and pro'lly will) of course. I may be able to find something, but it's all speculation and trial and error !

    "Everybody" tells you that you should only optimize after measuring/profiling, but when optimizing compilation times, we're back to trial&error?


    Note: The proposed "hack" from the comments with __TIME__ does not work, at least not on Visual-C++, because (as the docs state): The most recent compilation time of the current source file. The time is a string literal of the form hh:mm:ss. -- I guess one could at least get timings for single compilations units with this stamp, but it doesn't help to drill down into an compilation unit.


    SysInternals ProcMon会显示选定进程完成的所有I / O,包括发生时的时间戳和完整路径。


    There are a few ways to optimize your compile time:

  • Use a precompiled header. If you use Visual C++ than use the "stdafx.h". By default "stdafx.h" is set to be the precompiled header but I would recommend you checking this to make sure it is.

  • Use Linux :). If you don't have to use Windows for what you are doing I recommend using Linux. The compilation times on it are a lot better. Some of the reasons are: ext4 is ~40% faster than NTFS on average and it has a better process scheduler. When it comes to processor operations, Linux usually does it ~x1.8 - x2 times faster and compiling is processor dependent.

  • Use another Compiler. Clang/LLVM is known to have better compilation speeds and also has support for precompiled headers.

  • 链接地址: http://www.djcxy.com/p/85450.html

    上一篇: 分析OCaml编译器

    下一篇: 我如何找出编译器花费的时间?