Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Out of memory problem, a ne bi trebalo da bude

[es] :: Pascal / Delphi / Kylix :: Out of memory problem, a ne bi trebalo da bude

[ Pregleda: 2120 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milnen
Nis

Član broj: 73950
Poruke: 332
*.rcub.bg.ac.yu.



+5 Profil

icon Out of memory problem, a ne bi trebalo da bude01.06.2008. u 13:28 - pre 193 meseci
Imam problem u Delphiju.
Promenljiva Buf je deklarisana kao Array of DWord;
Kada probam SetLength(Buf,8*2400*2000) dobijem poruku Out of memory. Racunar ima 2GB memorije i u tom trenutku ima vise od GB slobodne memorije. Ovaj niz zauzima nesto manje od 150 MB.
O cemu se radi?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Out of memory problem, a ne bi trebalo da bude01.06.2008. u 15:45 - pre 193 meseci
> Promenljiva Buf je deklarisana kao Array of DWord;
> Kada probam SetLength(Buf,8*2400*2000) dobijem poruku Out of memory.
> Racunar ima 2GB memorije i u tom trenutku ima vise od GB slobodne memorije.

Meni prolazi u D7, i kada je deo steka (lokalna promenljiva) ili heapa (globalna). Kakva je situacija sa potrošnjom memorije u programu tada, možda nešto drugo okupira memoriju?

 
Odgovor na temu

milnen
Nis

Član broj: 73950
Poruke: 332
*.rcub.bg.ac.yu.



+5 Profil

icon Re: Out of memory problem, a ne bi trebalo da bude01.06.2008. u 17:17 - pre 193 meseci
I ja koristim D7. Imam jos gomilu drugih nizova. Probao sam da prvo rezervisem memoriju za ovaj veliki, a posle i za sve ostale. Tako je proslo. Zasto? Ne znam.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.dynamic.sbb.rs.



+1 Profil

icon Re: Out of memory problem, a ne bi trebalo da bude01.06.2008. u 20:47 - pre 193 meseci
Problem je fragmentacija memorije. Windows memory manager dodeljuje programima (i samom sistemu) trazene kolicine memorije, koju ti programi (u toku rada ili kada zavrse sa radom) vracaju sistemu, i tako u krug, sve bez nekog reda, pa vremenom dolazi do fragmentacije memorije, slicno kao kod hard diskova. To znaci da windows ima desetine, stotine, hiljade slobodnih blokova memorije, ali ako program trazi jedan veliki kontinualni niz slobodne memorije, Windows nije u stanju da to i omoguci pa dolazi do greske na koju se zalis. Takav problem imaju i poznatiji programi, npr.:

http://www.mathworks.com/support/solutions/data/1-1HE4G5.html

Moze se desiti da na tvojoj masini gde imas 2GB RAM memorije i ne bude neki problem da uzmes blokove od po 150MB, ali bih svakako izbegao pretpostavku da ces to moci i svakoj drugoj masini. Znaci ovde nije samo od uticaja ukupna fizicka kolicina memorije, vec i prethodno koriscenje memorije od strane samog windows-a i drugih programa na sistemu (u toku jedne sesije windows-a). Ako se racunar ne gasi duze vreme (server?) onda je stvar jos gora.

Ako je moguce promeni nacin na koji se memorija koristi tako sto ces koristiti manje blokove memorije, naravno ako je moguce, a da se performanse ne naruse. Bolji je i sporiji program koji sigurno radi, nego brz program "koji povremeno" ne radi, ili su zahtevi za njegovo izvrsavanje tesko ispunjivi u svakom trenutku.

Evo jos nekih linkova, pogledaj windows low-fragmentation heap, pogledaj kako radi windows memory manager:

http://msdn.microsoft.com/en-us/library/aa366779.aspx
http://support.microsoft.com/kb/894472
http://download.microsoft.com/...-9fde-d599bac8184a/MemMgt.docx

 
Odgovor na temu

milnen
Nis

Član broj: 73950
Poruke: 332
77.46.218.*



+5 Profil

icon Re: Out of memory problem, a ne bi trebalo da bude01.06.2008. u 21:39 - pre 193 meseci
Hvala za ove informacije. Nisam razmisljao o tome na ovaj nacin. Mislio sam da se memorija dodeljuje bez obzira na kontinualnost, kao sto to radi hard disk.
Inace radilo se o upisu na hard disk, pa sam hteo da u cugu upisem sto vise sa BlockWrite.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Out of memory problem, a ne bi trebalo da bude01.06.2008. u 23:59 - pre 193 meseci
> Inace radilo se o upisu na hard disk, pa sam hteo da u cugu upisem sto vise sa BlockWrite.

Mapiraj fajl u memoriju (memory mapped files) i onda će se promena u memoriji preslikati i na disk?
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Out of memory problem, a ne bi trebalo da bude

[ Pregleda: 2120 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.