[Wine] Re: malloc small pieces of memory
Geoff Streeter
geoff at dyalog.com
Tue Jun 27 04:41:04 CDT 2006
At 2006-06-27 10:26 +0200, Johannes Holzer wrote:
>Daniel Skorka schrieb:
> > Johannes Holzer <hl.ichaus at arcor.de> wrote:
> >>>> With Linux/Wine, the program fails with an "out of memory"-Error (malloc
> >>>> returns NULL).
> >>> If it fails, how can you tell its memory usage with top?
> >> The programmer was a good one. He checked the returncode of malloc and
> >> displays a dialog on failure. (yes, it seems, that there is enough RAM
> >> for the dialog.)
> >
> > Do I understand correctly that exactly when malloc returns NULL, this
> > program uses about 300 MB? In other words, it fails just before it
> > finishes mallocing?
> >
>The code is the following:
>
> do
> {
> *ppvHeapPointer = malloc(ui32Size);
> if (*ppvHeapPointer == NULL) A01_vCALL_OUT_OF_MEMORY_FUNCTION();
> } while (*ppvHeapPointer == NULL);
>
>
>A01_vCALL_OUT_OF_MEMORY_FUNCTION() displays an errormessage with the
>buttons "Repeat" and "Cancel". Cancel terminates the process.
>
>ui32Size has a value somewhere between 8 Bytes and 128 Bytes AFAIK.
>
>Johannes Holzer
>_______________________________________________
>wine-users mailing list
>wine-users at winehq.org
>http://www.winehq.org/mailman/listinfo/wine-users
Does this program use any other memory allocation functions, like
VirtualAlloc(), or mapped files? If it is trying to predict how much memory
is available and then allocating address space (without committing it)
there might not be enough address space left for new malloc areas. Does the
program use threads? How does it determine the stack space requirement for
its threads?
There are windows routines that will enumerate the virtual memory
allocation. Using them prior to displaying the dialog box may give you a
lot more insight into what may be happening. Note that malloc uses these
blocks and that it allocates reasonable sized blocks from which to serve up
small malloc()s.
More information about the wine-users
mailing list