Compile time optimisation for C++

Compile time optimisation for C++

Compile-time optimization is something that is usually applied last. Nevertheless, it has a direct impact on the cost savings of the development process, whether we are talking about computation power or the time of a developer.

Here I have a short list of tools that help to detect bottlenecks in compilation time:

The sequence of steps to reveal what goes wrong is simple:

  • Use the -ftime-trace Clang compiler flag to generate a JSON report for each translation unit.
  • Create an overall analysis with ClangBuildAnalyzer.
  • If needed, inspect a particular report using the Chrome utility via the address chrome://tracing/.

ClangBuildAnalyzer provides insights on the most expensive:

  • Translation units and functions to compile/optimize.
  • Headers to include.

If you need to understand what happened with a particular translation unit, you can open the corresponding generated JSON file with the Chrome trace viewer.

With this information, it's easy to detect bottlenecks in the compilation process. What you can do to eliminate these bottlenecks will be discussed in the following topics.

要查看或添加评论,请登录

Nikolai Kutiavin的更多文章

  • Golang generic implementation for Producer-Consumer

    Golang generic implementation for Producer-Consumer

    Producer-consumer design pattern is well-known in software development. In a few words, one object produces values, and…

    6 条评论
  • Factory Method in Python with blackjack and ?h?o?o?k?e?r?s? decorators.

    Factory Method in Python with blackjack and ?h?o?o?k?e?r?s? decorators.

    Design patterns help organize code in a better way, improving readability and maintainability. Many design patterns can…

    8 条评论
  • Non-blocking synchronization for std::vector

    Non-blocking synchronization for std::vector

    In my previous post, I described how to protect a std::vector using std::mutex. It was straightforward.

    13 条评论
  • Unit-test in C++: what should you know.

    Unit-test in C++: what should you know.

    Unit tests are important for a single reason - they prove that a single component works as expected in isolation. If a…

    9 条评论
  • C++ transactional memory

    C++ transactional memory

    Sometimes I feel like an archaeologist, and today I’ll share one of my findings: an old proposal for the C++ standard…

    24 条评论
  • Behavior vs Data concurrency protection

    Behavior vs Data concurrency protection

    Multithreading is one of the hottest topics in C++. However, the most crucial question isn't just about running code…

  • Why preprocessor directives are evil

    Why preprocessor directives are evil

    I'll start with a simple quiz: Do you think the code below is correct? Does it make more sense now? Preprocessor…

    42 条评论
  • Perl with classes

    Perl with classes

    Originally developed as a procedural language, Perl was later adapted to support modern Object-Oriented Programming…

    4 条评论
  • r-value reference: when and why?

    r-value reference: when and why?

    C++ has two commonly used types of references: l-value and r-value. An l-value reference points to an object with a…

    6 条评论
  • Network transport protocol: reliability and message-orientation out of the box

    Network transport protocol: reliability and message-orientation out of the box

    If I asked you to name a reliable network protocol for the transport layer, what would be the first one that comes to…

    4 条评论

社区洞察

其他会员也浏览了