Mitől függ egy Windows-os program memóriafogyasztása? Miért fordulhat elő az alábbi?
Üdv! Lenne egy félig elméleti, félig gyakorlati jellegű kérdésem, Windows-al, meg természetesen programozással (programozáselmélettel) kapcsolatban.
Konkrétan Windows XP-ről szól a kérdés.
Elöljáróban annyit - hogy ezt később ne kelljen magyarázni -, hogy maradt egy régi konfiguráció. Ez pont kapóra jött, hogy erről tudjak MIDI kommunikációval egy leharcolt YAMAHA szintit használni, aminek a kijelzője már tönkrement ezért praktikusan önmagában nem használható.
Főleg mivel VST-ket is szeretnék majd használni (bár nem mind valós időben, inkább renderelésre), ezért Windows-t kellett, hogy válasszak. Emellett voltak olyan kívánalmaim is - pl. virtuális MIDI driver, az alap standard túlontúl gagyi MIDI hangszínek lecserélésére - amikhez ingyenes és jól működő szoftvermegoldásokat csak XP SP3-ra találtam eddig, így még Win2k SP4-re se tudtam volna lemenni.
Így maradt az XP.
Nos, mivel a zenei programokon lesz a hangsúly, s egyébként Linux-ról egy kicsit ismét Windows-ra visszatérve elfogott a kísérletezgetős kedv, nekiálltam körülnézni annak - amin biztos a Windows-t használó kreatív informatikusok tiniként egyszer életükben átesnek -, hogy az átlag programokra, szoftverszolgáltatásokra, (amik nem a zeneszerzést szolgáják, de olyan alapszintűek, hogy azért kellenek egy PC-re a szükség esetére), milyen erőforrástakarékos alternatívák vannak. (gondolok itt a következőkre, pl.: shell (explorer.exe), fájlkezelő, ablakkezelő, webböngésző. feladatkezelő, logonui, stb-stb.
A keresgélés során aztán többek között rátaláltam, hogy még a puritán jegyzettömbökre is készültek alternatívák, nem is csak elvétve 1-2, hanem komplett gyűjtemény is van belőlük, amig direkt a régi, Pentium-os, vagy néhol még az előtti gépeket célozza meg, vagy tényleg az egyeseknek "extrémnek" tűnő egyszerűséget célozza meg.
Nos, az előzmények után, ami a kérdésem lenne:
Kipróbálgattam pár ilyen Assembly-ben, C-ben írt a Windows-os jegyzettömb egyszerű szintjén levő (vagy néhol kicsivel több, de azért célratörő) grafikus programot. - A DOS-osakat inkább hanyagoltam.
Mivel úm. ennél a kategóriánál spontán annyira nem látszik meg (működésében), melyik használ több, melyik kevesebb erőforrást, ezért az XP feladatkezelőjében próbátam megfigyelni, hogy melyik mennyi memóriát használ _megnyitott_ állapotban (mivel a RAM értéke tűnt a legszembeötlőbbnek), ill. miközben írok is bele. (bár nagy különbség ebben semelyiknél sem volt, csak ha letettem a tálcára)
Nos, a furcsa az volt, hogy egyik sem tudta megverni, de jobbára még csak beérni sem (bár volt, ami majdnem) az XP eredet jegyzettömbjét.
Próbáltam tisztán MASM-ban készült jegyzettömbö(ke)t (ilyen pl. a TopGun, EXE-méretre ez a legkisebb, amit eddig találtam), próbáltam, olyat is, amit szintén ASM-ben próbáltak erőforrásokra optimalizálni.
Utána kipróbáltam a Win98 és a Win95 jegyzettömbjét is, de még ezek is több memóriát ettek meg minden esetben is, mint az XP jegyzettömbje.
Pedig ugye az ember azt gondolná, hogy azok egyszerűbbek, egyszerűbb grafikát használnak, kevesebb funkció, így betöltendő kód lett beléjük programozva.... nemde? Pedig a gyakorlat mást mutatott.
Egyedül egy NASM-ban írt jegyzettömböt találtam, aminél ki volt emelve az erőforrásokra, köztük a memóriára történt optimalizáció. Ez majdnem beérte az XP-s notepad.exe-t, de pár száz KB RAM-al ez is mindig többet evett, akárhogy is próbálgattam.
Ez miért lehet? Mi v. mik magyarázhatja/magyarázhatják az, hogy az XP-nek a saját - bizonyára nem Assembly-ben, hanem minimum C-ben, vagy VisualBasic-ben írt - jegyzettömbje memóriahasználat terén jobban teljesít, mint az egyszerűbb, csúnyább, ASM-ben írt alternatíva?
Persze senki se gondolja, hogy ezt a kérdést praktikussági célzatok miatt vetettem volna fel, nem szándékozok KB-okra kisakkozni mindent egy 32 bites, 512MB RAM-os gépen, csupán ELMÉLETI SZINTEN ÉRDEKEL a dolgok lehetséges magyarázata.
Valamint, és nem utolsó sorban globális kérdéskörként is érdekelne - melyben talán több ember fog értelmet látni -, hogy min múlik az, hogy egy (grafikus) program memóriahasználatban optimalizált legyen. Miket kell figyelembe venni, amik nem annyira egyértelműek? Mennyire és hol játszik szerepet ebben az OS? (grafikus, ablakkezelőt használó programokról révén szó)
Pl. arra már elvétve láttam 1-2 példát, hogy nem mindig a ránézésre egyszerűbb, vagy a rövidebb kód a gyorsabb a CPU-n való bináris fordítás futásakkor. Pl. vannak olyan matematikai feladatok, amiknek az elvégzése sokkal gyorsabb, vagy más szmpontból optimálisabb, hogy ha az értékeket előre számolt táblázatokból - még ha azok nagynak is tűnnek - számolják, mint valami furfangos matematikai képlettel. Gondolom, memóriahasználatra való optimalizáláskor is megvannak az ehhez hasonló paraszti ésszel nem feltétlen egyértelmű szabályok... pl. (ebben nem vagyok biztos, csak blikkre mondom) kevesebb kód igényelhet több RAM-ot, mint ugyanazt végző, hosszabb kód.... de pontosan mik ezek a szabályszerűségek?
Valaki tudja ezeket?
Na most attól, hogy valaki programozgat nem lesz "szakmabeli".
Szakmabeli az lesz, aki a szakmában dolgozik.
'Na most attól, hogy valaki programozgat nem lesz "szakmabeli". Szakmabeli az lesz, aki a szakmában dolgozik.' :)
Valóban jó pár éve nem dolgozom a 'szakmában' és már a programozás is csak egy szórakozás.
Kösz Laci, igazából nem vagyok rá kényes, mivel a testvérem László és anno a faluban sokan keverték. Igaz ő már nyugdíjas esztergályos és kevés köze van az informatika programozás részéhez.
Az ominózus program: [link] itt van, pár sor volt az egész, programozás alapok szint.
Lajos, lajos!
De jó hogy itt vagy! És még az oldaladat is linkelted, mert most találtam rajta valami olyasmit, ami fontos lehet számomra!!
Az AUDIO fejlesztéseid között van egy alábbi:
"Az AudioLab komponens Equalizer tulajdonságainak bemutatása
Tanulmánynak készült a csatornák szétválasztására és az EQ
ablakok tesztelésére."
Namármost, az lenne a (számomra) nagyon fontos kérdésem, hogy ehhez a Wavelet és a Fourier transzformációkat Te implementáltad?!
Mert évek óta keresem arra a számomra érthető választ, hogyan lehet bájtszinten tárolt (akár 8 akár 16 bites) WAV - tehát tömörített PCM - hangfájlnak a spektrumképét előállítani, azaz a digitális hangfájlt frekvenciakomponenseire bontani, természetesen digitális keretek közt maradva.
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!