This can only be done when working with a microcontroller or without an OS. In that case you also don't need to declare that memory because you are in complete control. You would just need to remember not to use that memory for anything else so your alloc implementation should somehow know about it. When working in an environment like windows you could for example set a base address for a dll you use and derive the data address from that. There is of course a problem when requested that two dll's should load at the same base address. It is therefor only a hint to the OS that is often granted but not guaranteed. The same would be true for your own section. It would always be relative from the start of where you are loaded into memory. This also is true for methods you call in dll's. The method address is derived from the method address table and the address where the dll is loaded into memory. The x86 assembly has addressing modes using base, index, scale, displacement that are very suited for this.
Well, all in all it comes down to the fact that this isn't possible or something you would want to do if it could. It is clearly bad practice and abandoned in the pre protected-mode era.
This link might also be helpful:
http://www.gotw.ca/gotw/009.htm[
^]
Good luck!