Using CooCox as an alternative to Keil MDK-ARM - any limitations?
CooCox (by default, at least) uses the GCC compiler (tautology alert!), which is completely free.  I've been using CooCox for postgrad work and, although there are a few issues with the IDE (because it's Eclipse-based - make of that what you will...) I have found it to be very usable when compared to MDK-ARM (which I use at my day job).

CooCox (and GCC) have no code size limitations that I am aware of, and CooCox integrates very nicely with the STLINKv2 (including the built-in STLINKv2 on the ST32F Disco boards) for cheap STM32F debugging.