Ha fájlt olvasok be és egy 1 GB-os pufferbe olvasok be, ettől kiakadhat a program? (Pascal)
Mármint attól, hogy ilyen nagy a puffer, az OS nem úgy adja neki a memóriát ahogy a program szeretné (ehhez nem értek), nem ad ki annyit, esetleg nincs annyi RAM az adott gépben... Nem lehet azt megoldani, hogy annyi RAM-ot foglaljon le (vagy annak a felét) amennyi adott gépben van?
Ez a teszt program amelyben egy 1 GB-s tömböt hoztam létre, nem akad ki elvileg...
Bár a gép nagyon belassul, az biztos, pedig 3 GB RAM van benne...
Meg lehet oldani a feladatot úgy, hogy dinamikus tömb és biztonságosan, automatikusan annyit foglaljon le, amit biztos hogy az OS aktuálisan ki tud neki adni?
program fajlmasol;
const
meret = 1073741824;
var
inf, outf : File of Byte;
adat : Array[1..meret] of Byte;
NumRead, NumWritten:Longint;
Begin
Assign(inf,ParamStr(1));
Reset(Inf);
Assign(outf,Paramstr(2));
Rewrite(outf);
Repeat
BlockRead(inf,adat,Sizeof(adat),NumRead);
BlockWrite(outf,adat,NumRead,NumWritten);
Until(NumRead=0);
Close(inf);
Close(outf);
End.
Erre gondoltál?
Ezek szerint ez a módszer nem platformfüggetlen, illetve miként működne bináris fájlok esetén?
"Nem lehet azt megoldani, hogy annyi RAM-ot foglaljon le (vagy annak a felét) amennyi adott gépben van? "
Az a helyzet, hogy a program virtuális memóriát lát és foglal le, és az op.rendszer maga kezeli a fizikai memóriát. Tehát ki fog neki osztani, amennyit tud, és maga fogja "ki-swappelni", ha nem fér be a fizikai memóriába. És hiába adsz neki nagy blokkméretet, alacsonyabb szinten úgyis kisebb blokkokban fog mozogni az adat.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!