That's a bit difficult without knowing which PIC and which toolchain. For example, compilers for 16F chips are a lot less capable than compilers for the PIC32. By capable, I mean feature rich.
If your compiler generates a .map file, look at it. You will see where code is placed, where .data and .bss are placed and there is some equate that sets the value for the initial SP.
If your toolchain uses a linker script, there will be some great information in there regarding the size of RAM and FLASH as well as some reserved memory (sometimes).
I suspect that GCC is the most common compiler used for embedded programming even if it is wrapped up in a proprietary IDE. You should be able to find a great deal of information on the Internet. I don't think GCC supports PIC 16F. If it does, it is more recent than the last time I played with the 16Fs.
Why use a PIC? The ARM chips have more memory, a better toolchain, they're far faster and have better peripherals. Considering volume manufactured, I suspect they are cheaper. OTOH, they tend to be pretty complex. The older ARM7-TDMI are pretty approachable - LPC2106, LPC 2148. If you want to see some sample code for the LPC2148, wander over to
www.jcwren.com/arm. Sure, it isn't one of the newer Cortex ARMs but it's a pretty competent chip.