When a PIC has to change the bank select register to access another section of code memory, ram, or a register, that takes another instruction to do so, depending on where in the memory map this particular register or instruction is located.
So, if you've got code all spread out thru the memory map, or ram defined in a bunch of different locations, or are using registers in different banks, etc.etc. or doing all of the above a lot, you use an extra instruction almost each time.
I found this out awhile back when I was using the '877 on a large program and I ran out of room.

Try this little experiment:

Take a look at your program, specifically the variables in your program. Count the number of times each variable is used, take the highest used variable and assign it to BANK 0. Keep doing that, going down thru the list from the most used to the least used and keep trying to assign them to BANK 0 until the compiler complains that you are out of memory space.

Example:
Use 'TEMP1 var byte BANK 0'
instead of 'TEMP1 var byte'

You should find that your total code space usage will go down as you assign the most used variables to BANK 0. The reason variables assigned to BANK 0 used less memory is because it only takes one instruction to address those variables, whereas variables in a different bank (usually 2 or 4) take a second instruction to set up the pointer to those variables.
I did this with my mp3 player firmware a long time ago and found a savings of roughly 20% in code space.

Hope that somewhat answers your question. If not, look in the 'memory organization' section of your particular PIC's datasheet.

JDG