2 GB is not very much memory. By your estimate the OS is using 700MB + 300MB = 1 GB. You have 1 GB left for your app. You want to malloc 850 MB. Now you have 150 MB left for the rest of your app. And you wonder where your memory went?
You prefer that your app not swap. Well, welcome to the club. But suppose you somehow run out of memory... what should happen then? You have two choices:
1) allocate some swap so your app will continue run, albeit slower than you would like
2) allocate no swap so your app will reliably crash and burn should you run out of memory