Previous: DJGPP-specifičan kod, Up: GPC na DJGPP-u



3.3.9 Dobio sam “exception” kod pristupanja array [1 .. 4000000] of Byte

Po “default-u”, maksimalna veličina stoga DJGPP aplikacije je 256K. Ako trebate više, to trebate podesiti sa stubedit programom, npr.

     stubedit your_app.exe minstack=5000K

Drugačiji način je da dodate slijedeći kod vašem programu kako bi definirali minimalnu veličinu stoga (ovdje: 2 MB). Ova će vrijednost biti poštovana čak i ako korisnik postavi manje vrijednosti koristeći stubedit, tako da bi ova metoda mogla biti nešto sigurnija. (Ime linkera _stklen je esencijalno; ime korišteno u Pascalu nije od značaja. Konstanta se ne mora koristiti bilo gdje u programu. Preporučuje se da ovu deklaraciju stavite u glavnu programsku datoteku, ne u beku jedinicu/modul, tako da programi koji koriste modul/jedinicu mogu postaviti koji god limit im je potreban.)

     {$ifdef __GO32__}
     const
       MinStackSize: Cardinal = $200000; attribute (name = '_stklen');
     {$endif}

Svejedno, mogla bi biti dobra ideja koristiti pokazivače (“pointer”) na velike strukture, i alocirati memoriju dinamički za vrijeme izvršavanja.

DJGPP mora alocirati stog u fizičkoj memoriji za vrijeme pokretanja programa, dakle treba biti oprezan s prevelikim proširenjima stoga. Većina drugih sistema alocira stranice stoga “on demand”, kada ih program traži, pa je jedini razlog da se uopće postavi ograničenje taj da se spriječi da podivljala rekurzija pojede svu memoriju ...

Na Unix-olikim sustavima, možete postaviti “resource limit”, ali to obično ne radite u normalnim programima, nego radije u postavkama ljuske (bash: ulimit; csh: limit; sistemski poziv: setrlimit(2)).