Optimization tools beyond compiler

Now, we have learned about various compiler optimization techniques, and they are really great, so we don't need anything else, do we? Unfortunately, there are limits to the optimization the compilers can do, and these limits stem from the fundamental compiler limitation, which is that the compiler can see only one file at a time! This restricts all of the optimizations to the contents of that file only, and everything that happens in other parts of the program is like black magic to the compiler. We have already seen the pessimizations the compiler is forced to do when it sees an external function, haven't we? So, there are many optimization opportunities which have to be omitted because of the narrowed view the compilers are forced to take. What we need is whole program optimization (WPO), but how can we achieve that? One possibility is to use linkers to take over that job.