[LLVMdev] #include <iostream>
sabre at nondot.org
Fri Dec 8 11:34:16 PST 2006
On Fri, 8 Dec 2006, Vladimir Prus wrote:
> And what is the actual measured effect on compile time and run time?
The main impact of eliminating the #include of <iostream> is that it
eliminates a static ctor from each .o file that #includes it. For
something like llvm-gcc4, this will marginally reduce the startup time of
the app, though probably not significantly (it may not even be
The primary reason for doing this is to support clients using LLVM as
libraries as part of larger systems. In particular, we statically link
LLVM into some dynamic libraries. Even if LLVM isn't used, the static
ctors are run whenever an app starts up that uses the dynamic library.
There are two problems with this: 1) The time to run the static ctors
impacts startup time of applications, a critical time for gui apps. 2)
the static ctors cause the app to pull many extra pages of memory off the
disk: both the code for the static ctors in each .o file and the small
amount of data that gets touched. In addition, touched/dirty pages put
more pressure on the VM system on low-memory machines.
#2 is the big killer, and it's a reason we're eliminating static ctors in
general. Soon I will be landing a patch to the Statistic class that
eliminates its static ctor, which will eliminate another large
contributor to the problem.
More information about the llvm-dev