Kezdőoldal » Számítástechnika » Programozás » Ha fájlt olvasok be és egy 1...

Ha fájlt olvasok be és egy 1 GB-os pufferbe olvasok be, ettől kiakadhat a program? (Pascal)

Figyelt kérdés

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.



2015. jan. 28. 17:55
1 2
 1/12 anonim ***** válasza:
Azért lassul le, mert nagyon nem optimális 1 gigás blokkokban adatmozgatást csinálni. Valahová 1-4 KB környékére lődd be a puffert, mert minél nagyobb, annál lassabb lesz.
2015. jan. 28. 17:59
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:
Nem hiszem, hogy a pascal ilyet tudna. Inkább írj-olvass file-ból, úgyis becache-elődik!
2015. jan. 28. 18:00
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:
Szerintetek 4096 byte optimális pufferméret lenne...?
2015. jan. 28. 18:12
 4/12 SimkoL ***** válasza:
Jellemzően 4 K a HDD szektorméret ezért ezt szokták ajánlani.
2015. jan. 28. 18:26
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:
Jaa igen, ezt már ajánlották nekem, 4096K többszöröse legyen a puffer...
2015. jan. 28. 18:36
 6/12 anonim ***** válasza:
Nem rossz ha nagy a puffer méret, mert így hatékonyabban használja ki a DMA-t a gép és a HDD-nek kevesebbszer kell felpörögnie és szívességet tesztel a cache-nek és a predikciós algoritmusoknak is, de nem kell túlzásokba esni. Még ha le is tud foglalni annyi memóriát, valószínűleg át kell majd a többi program memória tartalmát másolnia a lapozó fájlba, majd ha újra használni akarod, ezt fogja a lapozó fájlba másolni, az meg visszamásolni. Ez okozza a lassulást, maradj ésszerű keretek között, például 32MB vagy 64MB. Aminek nincs értelme, hogy a 4K szektorméret alá mész, mert 4KB-t mindenképpen be fog olvasni.
2015. jan. 28. 23:46
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
Miért nem inkább memory-mapping mechanizmust használsz? AZ operációs rendszer kernelje hatékonyabban kezeli az IO-t, mint te userspace-ből!
2015. jan. 29. 00:03
Hasznos számodra ez a válasz?
 8/12 A kérdező kommentje:
Nem hallottam még soha a memory mapping-ról és nem tudom, Pascal-ban miként lehetne megcsinálni.
2015. jan. 29. 12:53
 9/12 A kérdező kommentje:

Erre gondoltál?

[link]

Ezek szerint ez a módszer nem platformfüggetlen, illetve miként működne bináris fájlok esetén?

2015. jan. 29. 20:43
 10/12 anonim ***** válasza:

"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.

2015. jan. 29. 21:24
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!