Wow I never heared about such option.
This are my results:
(compiled application is Win 32 bit)

How large are the memory blocks that you try to allocate.

Hard to say.
This happens inside TXMLDocument class as content is reading from file in procedure ReadXMLFile. May be that somewhere during processing occurs request for large block of data. (when I look at Resource Monitor as amount of memory is allocated I see there jump in one moment . more than 500 MB at once)


it should be 2GB on 32bit and 4GB on 64bit Windows with
*IMAGE_FILE_LARGE_ADDRESS_AWARE*

There is a difference between the total amount of memory you can allocate, and the maximum size of a single block of memory that you can allocate. The latter is much smaller than the former,

I tried allocate at once 1GB and it succed.

I did simple program:

var
  m: array[1..15] of pointer;
  i: integer;

begin
  for i:=1 to 15 do begin
    m[i] := getmem(1024*1024*200);
    fillbyte(m[i]^, 1024*1024*200, 0);
    writeln(i);
    readln;
  end;
  for i:=1 to 15 do begin
    freemem(m[i]);
  end;
end.

Which "confirms" limit 2GB, because it stops with run time error just before 2GB boundary.
With {$setpeflags $20} under Win64 it can bypass 2GB.

So it leads me to conclusion, that somewhere inside ReadXMLFile must be big request for memory block (may be for only short time), which overcomes limit 2GB.
May be some kind of copy (assign) class instance to another ?

-Laco.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to