Problems with VirtualAlloc/Lock

Michael Ost most at
Wed Mar 16 17:17:41 CST 2005

On Wed, 2005-03-16 at 00:32, Alexandre Julliard wrote:
> Michael Ost <most at> 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() - 

  return mmap(start, size, prot, flags, fdzero, 0);

  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)
    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,

More information about the wine-devel mailing list