On 32-bit x86 Linux systems with a standard libc the largest chunk of contiguous memory
available to any process is ~2GB; there are some dribs and drabs (about another half-GB)
available after that.
This has to do with how libc aligns its ELF segments relative to the heap.
On PAE enabled systems one can have multiple different processes each with their own 2+GB of
allocated memory.
Interestingly I've heard that 32-bit processes running under a 64-bit kernel can get much
closer to 3GB contiguously allocated. I guess the kernel is able to stay completely out of
the way in that case.
Unfortunately I haven't found any really good URLs that describe this in sufficient detail
(with sufficiently comprehensible diagrams) that I can really recommend them. And my
comprehension is limited --- so I can't explain it better nor draw the diagrams that I'm
eventually hoping to find.
(It's unfortunate because I work at a company that makes EDA software --- which is notoriously
memory hungry. So the question comes up far too often, despite the accelerating adoption of
64-bit systems).
JimD