2002.08.20 20:48 "OT: large memory allocation in Windows", by Dante Allegria
I am also confused about memory allocation. For the life of me, I cannot get Windows to allocate more memory than is contiguous in physical memory. In other words, if I do a GlobalAlloc for a fairly large chunk (perhaps 1GB or so), it always fails, even though I have lots of virtual memory. Anyone suggestions?
This is a problem that one of my co-workers encountered before. It's largely due to fragmentation of the process' virtual memory space. This can easily occur if you're using a lot of DLL's that have not been "rebased" (see the "rebase" utility that comes with MSVC). Even after you've rebased your DLL's into as low a memory location as possible, you still can't control where the OS loads various DLL's into your process virtual address space. If you want to check out your virtual address space, the OS call HeapWalk() and its cousins can give you more info.
Finally, note that you have a theoretical limit of 2GB of virtual address space on standard Windows NT/2K/XP anyhow so it's unlikely that you can go much past allocating 1GB of memory. On special enterprise editions of Windows, you can supposedly get up to 3BG of virtual address space for your app.