Kezdőlap › Fórumok › Programozás › miért zabálom a memóriát?
- This topic has 21 hozzászólás, 6 résztvevő, and was last updated 18 years, 8 months telt el by lacix. 
- 
		SzerzőBejegyzés
- 
		
			
				
2007-01-25-22:20 #2088780Most leállítottam mind a négy programot – a buffered és cached nem változott!? 2007-01-25-22:31 #2088781tovis wrote:a buffered és cached nem változott!?Mondod! vagy kérdezed? 2007-01-25-22:51 #2088782Állítom és nem értem! 2007-01-26-14:40 #2088783Ennyire éhes vagy? 
 Most kipróbáltam egy régi sd-ramon, de pocsék! :))))„fájlba nyomom – amolyan log fájl”, „9600 Baud -on /dev/ttySx” 
 Innentől magyarázni kell, hogy mért nő a lemez-gyorsító, meg egyéb tárad?
 Majd, ha elfogy a memória nem nő tovább.
 Ha újabb programnak kell a hely, akkor majd csökkenni fog.
 Ha meg már nem lesz gyorstár a memóriában, csak program, akkor valamelyik meg ki lesz lőve. :))))2007-01-26-23:48 #2088784Közben az LQ -n felhívták figyelmemet hogy ennek így kell működnie, mivel a Linux kernel (a windows -al ellentétben) sokat cachel és bufferel, így gyorsítván a működést, ráadásul ezeket a buffereket sokáig nem szabadítja fel, csak ha muszáj. Ráadásul a cache arányt be lehet állítani: 
 #echo 30 > /proc/sys/vm/swappiness
 ha jól idézem. A szám 0 … 100 ig tejedhet, a nullánáél mindent swappel a 100 meg mindent lefoglal cache -nek.
 Szóval nincs hiba sem az én programocskáimban, sem a kernellel nincs semmi baj – így kell működnie;o)2007-02-18-10:18 #2088785Azért még lehet olyan disznóság is hogy a programodban rendszeresen lefoglalsz és később fölszabadítasz egy kis memóriaterületet, de a fölszabadítás néha-néha elmarad. Ezt nevezik memóriaszivárgásnak. Oka egyértelműen programozási hiba. Egyszer én is jártam így egy démonként futó programmal. Egy ideig néztem a forráskódot mire megtaláltam a hibát. 2007-02-18-10:51 #2088786A programocskáim fő tulajdonsága, hogy nem foglal dinamikusan memóriát, az elején – setup/init részeként foglalok némi memóriát – azután már csak stacket használok végig! 
 Öreg róka vagyok – akkor programoztam DOS -t windows -t maikor még a dinamikus nmemória foglalás nem volt klorrekt. Az NT4.0 és csatlós nem profi rendszerek mint a win9x folyamatosan, operációs rendszer szinten el’szták az erőforrás kezelést! – nem csak a memóriát.2007-02-18-18:42 #2088787Hello! Nekem is van egy memóriás kérdésem. (Más jellegű, de talán elfér itt.) Az alábbi két kis programvázlat gcc-ben ekvivalens? void fgv_1(Típus *x); 
 Típus* fgv_2();
 void típus_felszabadít(Típus *x);1. 
 fgv_1( fgv_2() );2. 
 Típus *x = fgv_2();
 fgv_1(x);
 típus_felszabadít(x);Tehát, ha fgv_1 argumentumában megadok egy fgv_2-t, ami létrehoz vmit a memóriában, akkor az ami létrejött az fgv_1 lefutása után autamatikusan felszabadul? 
 A 2. megoldás természetesen jól működik, csak az sokkal kényelmetlenebb.Üdv. 
 L a c i2007-02-18-19:18 #2088788fgv_1( fgv_2() ); Típus *x = fgv_2(); 
 fgv_1(x);Ez ugye annyiban különbözik, hogy a 2. 32 bittel több helyet foglal. 
 (De ezek, csak címeknek az átadásai, tehát nincs mit felszabadítani. Az eredeti függvényed, viszont statikus, tehát nem fog felszabadulni.)2007-02-18-19:29 #2088789Az ok, hogy csak címek átadása történik, de a Típus* fgv_2() létrehoz dinamikusan pl. malloc-kal egy Típus struktúrát és azt adja vissza. Az nem viláogos, hogy ha így használom: 
 fgv_1( fgv_2() )
 akkor a fgv_2() által foglalt terület fel fog-e szabadulni.
- 
		SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.

legutóbbi hsz