Bulat Ziganshin wrote:

the following still remains true:

another strange thing is what under win32 (and only win32) without
"+RTS -M" option we are restricted to 256 Mbytes of heap. see at this
code:


 if ( (base_non_committed == 0) || (next_request + size > end_non_committed) ) {
   if (base_non_committed) {
       /* Tacky, but if no user-provided -M option is in effect,
        * set it to the default (==256M) in time for the heap overflow PSA.
        */
       if (RtsFlags.GcFlags.maxHeapSize == 0) {
           RtsFlags.GcFlags.maxHeapSize = size_reserved_pool / BLOCK_SIZE;
       }
       heapOverflow();
   }

i think it must be:


 if ( (base_non_committed == 0) || (next_request + size > end_non_committed) ) {
   if (base_non_committed && RtsFlags.GcFlags.maxHeapSize) {
       heapOverflow();
   }

It looks like freeAllMBlocks() wouldn't work properly if more than one 256Mb chunk was allocated, because we don't remember the location of previous chunks.

Have you tried this?  Does it work, apart from freeAllMBlocks()?

Cheers,
        Simon
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to