I've found a way of using lots of program memory - do floating point calculations using the C library functions ... I've been trying to code up the
Latitude/Longitude to OSGB Easting/Northing conversion on an PIC18F4550 - I was planning to use the USB functionality to communicate with a PC and use the USART to receive NMEA sentences from a GPS receiver.
I have a working version of the conversion algorithm, and that (together with the library code that it has pulled in) has taken up nearly 75% of the available program memory. I'm beginning to think that I may have to go to a design with 2 PICs, one doing USB to a PC and various other functions and the other doing the co-ordinate conversion and then communicate between them with I2C or SPI or something similar.