[an error occurred while processing this directive]
Node:QDPMI alloc,
Next:Windows alloc,
Previous:QDPMI VM,
Up:Memory
Q: OK, I've changed my program to never allocate more memory than is
physically available, to work around that QDPMI VM bug, described in
previous section, but my program still gets a NULL
pointer
from malloc/calloc
!
Q: Why is my program dying with SIGSEGV under CWSDPMI when
allocating a chunk of memory?
A: Another peculiarity of QDPMI which came with QEMM before version 8.0: it will never let you allocate a chunk which is larger than half of what's available. Windows 3.X behaves in the same way, and several people reported the same to be true under Windows 9X.
If your program asks for memory in lots of small allocations, then it might crash when you use CWSDPMI as your DPMI host. This is because CWSDPMI runs out of its tables, allocated in the heap, where it tracks memory allocations. Beginning with release 2, CWSDPMI defines a 6KB-large default heap that is configurable by CWSPARAM program to be anywhere between 3K and 40K bytes, without recompiling CWSDPMI. The default heap size is enough for about 21MBytes in small chunks. You should upgrade to the latest CWSDPMI if you experience such problems, and bump up its heap size as needed.