[ edmir @ 01.10.2004. 14:35 ] @
type Buffer=array[0..1000000] of byte; b:buffer; je Ok
type Buffer=array[0..2000000] of byte; b:buffer; javlja stack overflow
Zasto?
Ovaj mi buffer traba da u njega upisujem dio file-a koji dijelim
i treba da je 1440000 ali samo na 1000000(1MB otprilike) radi dobro.
Cini mi se da sam ovo isto nekad radio i bilo je ok ali .... ne znam.
[ sasas @ 01.10.2004. 14:55 ] @
Project -> Options -> Linker -> MemorySizes -> MaxStackSize sa $00100000 (1 mb) prebaci na $00200000 (2 mb) i to ce da radi posao.

Samo nisam siguran koliko je to resenje lepo i prakticno (imati toliko mnogo podataka na steku).

lp, ss
[ edmir @ 01.10.2004. 20:54 ] @
Havla Saša,to je rješenje.
Ma lakše mi je tako da imam komade veličine diskete nego da ih spajam da bih dobio tu veličinu.
[ morlic @ 01.10.2004. 22:26 ] @
Koristi TMemoryStream ili TFileStream. Ovo sa ogromnim baferom je nekako trapavo (izvini na izrazu)
[ Rapaic Rajko @ 05.10.2004. 09:43 ] @
A ovako nesto:

Code:

type
  TBigArray = array[0..3000000] of byte;
  PBigArray = ^TBigArray;

var
  MyBigArray: PBigArray;
  abyte: byte;

begin
  MyBigArray := nil;
  GetMem(MyBigArray, 2000000);
  ...
  MyBigArray^[0] := 15;      // ovo je OK
  abyte := MyBigArray^[0];  // i ovo takodje
  ...
  abyte := MyBigArray^[2500000]; // ovo cita memoriju koja NIJE tvoja
  MyBigArray^[2500000] := 55; // ovo pise po memoriji koja NIJE tvoja
  ...
  abyte := MyBigArray^[3000100]; // e, ovde radi 'range checking' - ako je ukljucen
  ...
  FreeMem(MyBigArray);
end;



Na ovaj nacin, array je alociran na heap-u. Heap je dinamicka memorija, i sistem ce ti je dati koliko god ima (citaj: virtualna memorija - prostor na disku koji emulira memoriju). Jedino sto moras da pazis da ne prekoracis indeks (vidi gore code).

Rajko