No your quite right. Any memory pointer in 32 bits has a max addressable space of 2^32 which is exactly 4Gb but windows must reserve some of this for the kernel and it uses 1Gb leaving 3Gb of user space for your programs. Therefore you cant allocate more than 3Gb in any one lump. Also a 32 bit program running in a 64 bit windows also has the same limitation. Only a 64 bit app running in a 64 bit OS can do more.