Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 4.409 pregleda

Najnovija ↓

Gdje je razlika?? 01.10.2004. u 15:35 · pre 268 meseci #1
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.
Potpis
Kovac
Re: Gdje je razlika?? 01.10.2004. u 15:55 · pre 268 meseci #2
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
Potpis
When something is hard to do, then it's not worth doing.
Re: Gdje je razlika?? 01.10.2004. u 21:54 · pre 268 meseci #3
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.
Potpis
Kovac
Re: Gdje je razlika?? 01.10.2004. u 23:26 · pre 268 meseci #4
Koristi TMemoryStream ili TFileStream. Ovo sa ogromnim baferom je nekako trapavo (izvini na izrazu)
Re: Gdje je razlika?? 05.10.2004. u 10:43 · pre 268 meseci #5
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme