I am using OpenGL to display large 2D-images in windows with W2K / W XP. When using OpenGL the amount of main memory which may be allocated by the program seems to be limited to 1 GB, although much more memory is installed in the PC. If OpenGL is not used by the same program, memory can be allocated as expected (up to 2 GB).
Can anyone help me ? Does an absolute limit or address limit of usable memory exist ? Can it be changed ? How ? Depends it on the video hardware / driver ?
>>Does an absolute limit or address limit of usable memory exist ?<<
Yes, on 32-bits OSes the virtual address space is 4GB. Under Windows 32-bit systems that is normally divided to 2GB for user and 2GB for kernel space. Addresses with the highest bit set are kernel addresses then. Note, this is virtual address space per process.
>>Can it be changed ?<<
Not the limit, but the user address space size.
>> How ? <<
Under Windows 32-bit systems there is a /3GB switch to be added in the boot.ini and your program needs to be compiled as /LARGEADDRESSAWARE.
The 32-bit address space is then divided to 3GB user and 1GB kernel addresses.
It is possible to work around the virtual address space limitation and manipulate all physical memory supported by OS (some 32bit Windows editions supports more than 4GB of physical memory) however the program code must be modified to access this additional memory in special way using the Address Windowing Extensions . It will allow you to have more application data in memory (e.g. as cache) however it will not work around address space consumed by driver so ammount of memory you can have simulatenously uploaded to it will be limited.
Problem with this approach is that it requires user rights which even the administrator does not have by default and that it does not work well in highly multitasking environment because it is meant for use with applications that have entire computer available (e.g. database serves, huge data processing applications).