On Wed, 2005-03-16 at 00:32, Alexandre Julliard wrote:
Michael Ost most@museresearch.com writes:
Wine reports that apps have 2GB of VM in GlobalMemoryStatus, but they actually only have 1GB. Isn't that a Wine bug?
Not really, you do have 2GB of VM, you just can't allocate all of it with VirtualAlloc(NULL) because of kernel limitations. You can still access it by specifying explicit addresses.
Here's a suggestion. Certainly naive, but would it work? The idea is to trap mmap allocations which go above "user_space_limit" and retry them in the space below 0x4000,0000. Something like this in lib/wine/mmap.c wine_anon_map() -
replace: return mmap(start, size, prot, flags, fdzero, 0);
with void* addr = mmap(start, size, prot, flags, fdzero, 0); /* disallow allocations above the windows limit */ /* OR can you to find this out without mmap()ing first? */ if addr + size > user_space_limit) munmap(addr) addr = 0;
/* look below linux's 0x40000000 address if a specific */ /* address wasn't requested */ if start == 0 and addr == 0 /* 0x08000000 is the start of the TEXT segment - */ /* start looking there */ addr = mmap(0x08000000, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
return addr;
This should start allocating memory from below 0x4000,0000 to windows processes after the area between 0x4000,0000 to 0x8000,0000 is full, right?
From way out of my depth %) ... mo
PS: my company is very interested in getting this fixed. I might be able to shake some money loose for the development.