Mike,
You're on the right track. You're right about the HW constraints (For the maximum size memory anyways). I believe what is necessary in your case is to diverge from the fully automatic SW dev flow and play with a linker script. If you make a SW project in the IDE, there will be a file called "generated.x", in the syslib project system description folder (I think). This file is what tells the linker where to put text, exception, bss, stack, heap, etc. Now I am no linker script expert and I hear fiddling with these can be 'fun' so to speak, so I'd recommend small incremental changes to meet your goals... however, it should be pretty straight forward: the sizes of memory (SDRAM for example) are defined here and they will control what the linker is allowed to use.
If you were to, for example, define a "minimum" SDRAM size that is linked against, and then# defined this into your application code, you might be able to do a walking memory test at boot up to figure out how big the SDRAM really is, and then use this information to know how much is available for your application to use.