On Mon, Jan 25, 2010 at 9:05 PM, Meador Inge <mead...@gmail.com> wrote: > Also related to reduced code size with C++ I was wondering whether or not > anyone has explored using the ability of some toolchains to remove unused > code and data? In GCC this can be enabled by compiling with > '-ffunction-sections' and '-fdata-sections' and linking with > '--gc-sections'. In MS VC++ you can compile with '/Gy' and link with > '/OPT'. This feature can lead to size reductions sometimes with C++ due to > things like template instantation causing multiple copies of the same > function to be linked in. I played around with compiling CPython with this > (gcc + Darwin) and saw about a 200K size drop. I want to try compiling all > of U-S (e.g. including LLVM) with these options next.
I'm sure someone has looked at this before, but I was also considering this the other day. One catch is that C extension modules need to be able to link against any symbol declared with the PyAPI_* macros, so you're not allowed to delete PyAPI_DATA globals or any code reachable from a PyAPI_FUNC. Someone would need to modify the PyAPI_* macros to include something like __attribute__((used)) with GCC and then tell the linker to strip unreachable code. Apple calls it "dead stripping": http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/ld.1.html This seems to have a section on how to achieve the same effect with a gnu toolchain: http://utilitybase.com/article/show/2007/04/09/225/Size+does+matter:+Optimizing+with+size+in+mind+with+GCC I would guess that we have a fair amount of unused LLVM code linked in to unladen, so stripping it would reduce our size. However, we can only do that if we link LLVM statically. If/When we dynamically link against LLVM, we lose our ability to strip out unused symbols. The best we can do is only link with the libraries we use, which is what we already do. Reid _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com