LWN.net Logo

LCA: Lessons from 30 years of Sendmail

LCA: Lessons from 30 years of Sendmail

Posted Feb 11, 2011 9:33 UTC (Fri) by cmccabe (guest, #60281)
In reply to: LCA: Lessons from 30 years of Sendmail by nix
Parent article: LCA: Lessons from 30 years of Sendmail

See my comment below. Basically, private data members of a class also need to be #included in that class' header file. So you *cannot* "avoid parsing the vast majority of headers more than once."

Under ideal conditions, C++ compilation is slow. If you add even a few non-ideal conditions, like programmers who love to define functions in header files "for performance", extensive use of templates, auto-generated anything, or unecessary cross-module dependencies, it becomes positively glacial.

Unfortunately real-world projects tend to have some or all of these conditions. I'm too lazy to find the reference now, but Google's C++ compile times are said to be measured in hours. And those guys read Effective C++ and know their stuff.

Precompiled headers sound helpful, but only for headers you are including from external libraries. Maybe they would be useful for something like QT? I haven't used precompiled headers.


(Log in to post comments)

LCA: Lessons from 30 years of Sendmail

Posted Feb 19, 2011 0:24 UTC (Sat) by nix (subscriber, #2304) [Link]

Er, when I said 'more than once' I said 'more than once per translation unit', and this is almost universal. This reduces your claimed O(n^2) to, uh, O(nm) where n is the number of translation units and m is the number of headers.

Precompiled headers are useful in any project where you have one great big header that #includes a lot of stuff. This is extremely common.

Copyright © 2013, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds