Es ist nicht das Programm, das den Arbeitsspeicher verwaltet, sondern das OS.
Bei 32Bit HW:
Unter Windows 32 Bit wurde die Arbeitsspeichergrösse pro Prozess auf 2GB beschränkt, was aber nichts damit zu tun hat, dass nicht mehr möglich wäre, sondern das wurde einfach so definiert, da eh niemand mehr als 4GB Arbeitsspeicher verwenden konnte (Ram effektiv verwendbar = 4GB - VRAM -RAM der Soundkarte u.s.w).
Deinem 32Bit Programm wird vom OS soviel Arbeitsspeicher zugesprochen, wie es benötigt, jedoch maximal 4Gb.
Bei Supercomputergedöhns und so Uni-Forschungs-Firlefanz ist es da schon anders, die Rechner dort laufen jedoch nicht mit Windows 
Hier noch ein Auszug aus Wikipedia :
Der linear adressierbare Speicher kann praktisch nicht lückenlos mit RAM belegt werden, gängige Computerarchitekturen zweigen Adressraum für die Einblendung von System-ROM und IO-Bereichen ab, z. B. Onboard- und Erweiterungshardware wie Grafik- und Soundkarten. Im x86-Umfeld sind 2,0 bis 3,75 GB RAM üblicherweise nutzbar, die genauen Werte hängen vom Mainboard und Ausbau an internen Erweiterungskarten sowie von den BIOS-Einstellungen ab. Unter Windows kann ein einzelner 32bit-Prozess generell nicht mehr als 2 GB belegen, außer IMAGE_FILE_LARGE_ADDRESS_AWARE ist im Header der Anwendung aktiviert (dann sind bis zu 3 GB möglich auf einem 32bit-Windows, bzw. 4 GB auf einem 64bit-Windows)
Bei 64 Bit HW + 64 Bit SW:
Kannste bis zu 16EB RAM verwenden, was aber nicht nötig sein wird. Da kannste dann deinem Prozess soviel Arbeitsspeicher zur Verfügung stellen, wie dir lustig ist.
Fazit:
Hau dir 8Gb und ein x64 OS rein, dann haste ganze 4Gb alleine für dein Prog und nochmal 4 fürs Windows.