Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van. 1336
Fórum Archívum (Témák/Fórumok) / (Leírás) Az AMX és az AMX-memóriatérkép« Dátum: 2013. január 12. - 12:34:54 »Idézetet írta: Rupert date=1357989580\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"32288\" data-ipsquote-contentclass=\"forums_Topic Köszönjük a leírást, nagyon szép! Áthelyezve.Köszönöm az áthelyezést. 1337
Archívum / BBEHosting.hu ~[Best Of 2012 - Az év hosztingja]~« Dátum: 2013. január 12. - 12:18:31 »
Fel lehet hívni az ember figyelmét több módon is egy résre. Nyugi Pöpec, szerintem mindenki megérti, hogy foglalkozol a hoszttal és hogy most ez eléggé vis major helyzet.
1338
Fórum Archívum (Témák/Fórumok) / (Leírás) Az AMX és az AMX-memóriatérkép« Dátum: 2013. január 12. - 10:09:51 »
KEZDJÜK A RIZSÁVAL
Igen, tudom, hogy van egy teljesen ugyanilyen leírás a hivatalos fórumon, és azt is, hogy ugyanazt fogom gyakorlatilag elmondani kétszer. Viszont fontosnak érzem, hogy azt az alapot kicsit felturbózzam, és megérthetõvé tegyem azok számára is, akik esetleg nem értik elsõre, hogy mi az a LIFO, heap, stack, és a többi. Épp ezért, és az emészthetõség miatt nem állt szándékomban a formális szaknyelv használata. Ez után pedig térjünk rá, hogy ez a cikk lényegében kinek jó: akit érdekel. Ettõl a módod gyorsabb nem lesz, kevesebb bug biztos nem lesz benne, nem is lesz stabilabb, tehát tényleg csak azoknak ajánlom, akiket érdekel, hogy valójában hogy is fut le a kódjuk, amit írnak. AMX Mint ahogy az a deAMX topicban is elhangzott, az AMX rövidítés jelentése Abstract Machine Executor, vagyis absztrakt gép végrehajtó, értve ez alatt azt, hogy ez az a kód, amivel az absztrakt gép végrehajtja az utasításokat. AZ ABSZTRAKT GÉPEK Mi is egy absztrakt gép? Mint azt bizonyára mindenki tudja, a legfontosabb elméleti gép, automata az ún. Turing-gép. Gyakorlatilag egy olyan automata, amely végtelen sok memóriával rendelkezik. De mi is egy automata? Elõször is szögezzük le, hogy a Turing-gép nem létezik, csak egy elméleti modell. Ezért használunk rá nagyon egyszerû, leíró nyelvezetet. A Turing-gép egy olyan gép, amelyhez egy végtelen hosszú papírszalag tartozik. Minden papírszalagon \"betûk\"/\"szimbólumok\" (ez a hivatalos megfogalmazás) találhatók. Egyszerûség miatt tekintsük ezeket nullának és egynek. A gépbe be van programozva egy adott utasítássorozat, amit végrehajt a szalagon, ezt a logikai vezérlõegységbe programozták be. Például tegyük fel, hogy a szalagunkra ez van írva: 0[0]11. Az olvasófej a második nullán áll. Tegyük fel, hogy az az utasítássorozat van beprogramozva, hogy
A következõ utasítás a szalagon lévõ karaktereket 0100-ra változtatja, és nem áll meg. Amennyiben nem ugranánk vissza egyre a következõ változó értéke már nem lenne módosítva. MIÉRT ELÕNYÖS AZ AMX? Az absztrakt gép egy számítógép virtuálisan. Ennek több elõnye van az x86 assemblyvel (tehát a \"tényleges\" natív assemblyvel) szemben:
A REGISZTEREK Az AMX regisztereket használó absztrakt gép. A regiszterek a processzorok elidegeníthetetlen részei a Neumman-elvek óta. Ennek elõnye az, hogy az absztrakt gép utasítása jobban \"rásimul\" a natív kódra, tehát a futásidõ csökken, valamint az utasítások száma csökkenthetõ. Az AMX egy kétregiszteres struktúra, két számításra alkalmas regiszter található meg: a PRI és az ALT. Az alábbi kódot: a = bö 2; Az AMX assemblyjében így kaphatjuk meg:
A REGISZTEREK LISTÁJA
Az AMX fájl memóriaképét, vagyis a memóriában elfoglalt helyét mutatja be az alábbi táblázat. A HEAP és a STACK alapvetõen nincs a bináris fájlban, elõállítását az AMX végzi a PREFIX adatok alapján. Ahhoz, hogy a lenti memóriaképnek megfelelõ bináris kódot kapj, használd a #pragma compress 0 direktívát a scriptedben.
A prefix A prefix rész a kód legelején terül el, és elsõdleges feladata általános metaadatok, pointerek, és a függvények listáját tárolni. A memóriatérképe a következõ (az X-el jelölt dinamikusan változik az adat mennyiségétõl függõen): (a teljes táblázat megtalálható a pawn-imp guide-ben, én ezt a verziót Y_Lesstõl szereztem, köszönöm)
A stringek NULL-delmitáltak (tehát a minden string végén szereplõ \\0 karakter jelzi a string végét), és tömörítettek. A konstansok (különösen a stringkonstansok) a DAT szegmensben tárolódnak, tehát irrelevánsak jelen esetben. A code szegmens A TEXT vagy CODE szegmens egy olyan szegmens egy bináris fájlban, vagy a memóriában, amely a futtatható utasításokat tartalmazza. A CODE szegmensnek a memóriában általában csak 1 példányra van szüksége, mivel megosztható. A CODE szegmens szinte mindig csak olvasható, hogy megakadályozható legyen az, hogy a program véletlen a saját utasításait módosítsa. A data szegmens A DATA szegmens a program virtuális memóriájának egy része, az egész program számára elérhetõ (ti. globális) változókat tárolja. A heap A heap, vagy \"halom\" a memória dinamikusan használható része. A \"halom\" igen deskriptív: hiszen gyakorlatilag a halomra akármikor hozzáadhatunk vagy elvehetünk valamit anélkül, hogy az egész összedõljön. Ha egy új dinamikus változót hozunk létre, lényegében a heap-bõl vesszük el a területet. Mivel a létrehozott változónak lefoglalt memóriaterület sosem ismeretes elõre, a new statement mindig egy pointerrel tér vissza a heapban tárolt pozícióval. A PAWN nyelv nem használ dinamikus változókat, minden változót vagy a DATA (glob), vagy a STACK (lok) szegmensek tárolnak, ezért például a memory leak-ek nem lehetségesek. Azért ide megemlítem, ha valakinek van kedve a memory leakekhez, hogy Y_Less malloc függvénykönyvtárával lehetõséged van \"dinamikus\" memóriát kiosztani (azért idézõjelbe, mert ez sem igazi dinamikus memória, és ez sem a heapben van, csak egyfajta workaround). A stack A STACK, hivatalos magyar nevén \"verem\", deskriptívabb nevén \"rakás\" egy memóriakezelési szerkezet. Mielõtt jobban megvizsgáljuk, nézzük meg az alábbi példát: Tegyük fel, hogy van egy rakás téglád egymáson. Mivel a téglák nehezek és rakásban vannak (tehát mindegyik tégla a másik tetején), ezért lényegében három dolgot tehetsz a téglákkal anélkül, hogy összedõljenek:
A stack egy olyan memóriakezelési struktúra, ami változókat tárol, hasonlóan a tömbökhöz. Viszont míg a tömbökben tetszés szerinti elemet elérhetsz, addig a stack ennél limitáltabb. Lényegében a fenti három dolgot teheted meg a stackkel:
Ahogy a téglás hasonlat is mondja: ha valaki egy téglát rárak a rakásra, akárki, aki levesz egy téglát a legfelsõt fogja levenni. Ez a LIFO-elv: last in-first out. A legelsõ felrakott elem lesz a legelsõ, amit levesznek. Ez, bár szép analógia, lehetne egy jobbat is létrehozni. Vegyünk egy adott számú postaládát: mindegyik egymás fölött, mindegyik csak egy dolgot tarthat magában, mindegyik üresként kezdi, és persze mindegyik az alatta lévõvel össze van ragasztva, így a számuk nem változik. A kérdés: ha a postaládák száma nem változtatható, hogyan kapunk egy stacket? Jelöljük meg egy matricával a legmagasabban lévõ üres postaládát. Minden a matrica alatt lévõ postaláda a stack tagja, minden a matrica fölött lévõ postaláda nem a stack tagja. Ez szinte azonos azzal, hogy mûködik a stack. A stack egy elõre meghatározott mennyiségû memória: a postaládák memóriacímek, és a levelek a memóriacím alatt lévõ adatok. A \"matrica\" a fentebb említett STK regiszter: Stack Index/Stack Pointer, ami mindig a legnagyobb elérhetõ stack címre mutat. Az egyetlen különbség a postaládás hasonlat és a valós stack közt az, hogy ha az adatot el akarjuk tüntetni, nem kell \"kiüríteni\" a postaládát: elég a matricát egyel lejjebb helyezni és az a memóriarész onnantól nem a stack tagja, amíg a következõ memóriarész felül nem írja. Miket rakunk a stackbe? Változókat, paramétereket, és függvényhívásokat. Mivel a globális változók a DATA szegmensbe kerülnek, ezért nekünk lényegében csak azzal kell foglalkoznunk, mi történik a lokális változókkal: tehát a függvényeken belül meghívottakkal. Példaképp tekintsük meg az alábbi kódot:
Ez, a nem mûködõ, viszont példaként tökéletesen használható kódrészlet tökéletes példa a stack bemutatására. Mikoris a main() függvény meghívja a foo függvényt, az alábbi játszódik le (ezt szaknyelven a Standard Entry Sequence-nek hívjuk): Az egyszerûség kedvéért a main()-t fogjuk hívni a meghívó függvvénynek míg a foo()-t a meghívott függvvénynek.
Minden stackre helyezett elem esetén természetesen frissítõdik a STK regiszter helye (ami a stack legfelsõ elemét mutatja). Ha a függvény megáll, lefut a fenti ellentéte, a Standard Exit Sequence
Zárásnak még annyit: hogy azért is futnak a több-threades programok gyorsabban, mert mindegyiknek külön stackje van. A heap és a stack, stack overflow Lehetõség van arra, hogy a stack számára elõre lefoglalt memóriát túllépjük, és beleírjunk a heap-be: ez általában nagy mennyiségû változó esetén következik be, ezt nevezzük stack overflownak. Ez azért lehetséges, mert a heap és a stack ugyanazt a memóriaterületet kapja, de ellentétes irányban kezdõdnek: a heap egyre növekvõ, míg a stack egyre csökkenõ memóriacímeket kap. A stack overflow tényérõl a fordító tájékoztatást ad: mégpedig kiírja, hogy az egyes szegmensek mennyi bájtot foglalnak el, és hogy a HEAP/STACK szegmensnek mekkora a maximális mérete, és mekkora az a méret, amit igényelne ahhoz, hogy minden változó elférjen benne. Ez azért lehetséges, mivel a stack mérete a fordítás során már ismert. Jogosan felmerülhet a kérdés, hogy akkor miért nem kap az AMX automatikusan több memóriát a programhoz: ez a mennyiség limitált és alapjában véve nem túl nagy, tehát megeshet, hogy egy normálisabb módhoz is növelni kell. Ezt a #pragma dynamic direktívával lehet megtenni. (és ennyi, frissítések várhatóak) 1339
Archívum / BBEHosting.hu ~[Best Of 2012 - Az év hosztingja]~« Dátum: 2013. január 12. - 08:39:22 »
[mod]Kiraktam egy figyelmeztetést a fõposztba, de ide is elmondom, hogy az esetleges ártalmas kódok elkerülése miatt ne kattintsatok a weboldalra, amíg átvizsgálásra kerül.[/mod]
1340
Archívum / BBEHosting.hu ~[Best Of 2012 - Az év hosztingja]~« Dátum: 2013. január 12. - 08:12:51 »
A mostani weboldal a ti \"mûvetek\" vagy defacelték?
1341
Fórum Archívum (Témák/Fórumok) / (Leírás) A DeAMX, és hogy miért "nem mûködik".« Dátum: 2013. január 11. - 22:13:25 »Idézetet írta: James_Raynor date=1357913797\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"31816\" data-ipsquote-contentclass=\"forums_Topic Memóriakezelésnél én a FILO és FIFO-nál megakadtam... krisk, ha van skyped és valamikor ráérsz adhatnál egy kis továbbképzést, mert utálom magam hülyének érezni.Akkor inkább megírom a leírást, és akkor mindenki elérheti meg tanulhat belõle. Valamikor a hétvégén elkészül. (amúgy amit te írsz az a LIFO, és a stack memóriakezelési alapja: a legkésõbb lefoglalt blokk az, amit legelõször törölnek) e: kész. 1342
Általános / Palomino RPG beszélgetés« Dátum: 2013. január 11. - 21:48:42 »
[mod]Az admincsapattal kapcsolatos beszélgetés át lett helyezve a társalgóba (ide). Mostantól az ilyen jellegû témákat kéretik itt megbeszélni. Ha ott elõkerül ismét ez a téma huzamosabb idõn belül, az illetõ off miatt warnt kap, továbbá eléggé valószínû, hogy a figyelmeztetések mindenkinek ki lesznek osztva. A téma kiemelése meg lett szüntetve glob mod engedéllyel, az indokot lásd ebben a topicban.[/mod]
1343
Archívum / Palomino RPG - Vissza a kezdetekhez« Dátum: 2013. január 11. - 21:47:53 »
[mod]Az admincsapattal kapcsolatos beszélgetés át lett helyezve a társalgóba. Mostantól az ilyen jellegû témákat kéretik ott megbeszélni. Ha itt elõkerül ismét ez a téma huzamosabb idõn belül, az illetõ off miatt warnt kap, továbbá eléggé valószínû, hogy a figyelmeztetések mindenkinek ki lesznek osztva. A téma kiemelése meg lett szüntetve glob mod engedéllyel, az indokot lásd a másik topicban.[/mod]
1344
Fórum Archívum (Témák/Fórumok) / Re:Palomino RPG beszélgetés« Dátum: 2013. január 11. - 21:42:46 »
[mod]Na most jött el az, hogy ezt az egészet szépen áthelyezzük a társalgóba, és ott lehet folytatni, vagy megkérek egy glob modot hogy a jogos figyelmeztetéseket ossza ki, mert ez nem állapot mostmár.[/mod]
1345
Archívum / Los Angeles Prison Roleplay --> ZÁRVA« Dátum: 2013. január 11. - 20:24:09 »
[mod]Rendben, most hivatalosan is kapsz 1 napot, hogy valamennyi leírást még írj, mert ez még a hamarosan nyíló szerverekhez is kevés. 24 óra után további szankciók következnek.[/mod]
1346
Általános / Palomino RPG beszélgetés« Dátum: 2013. január 11. - 19:55:25 »
[mod]Mivel a szerverre rengeteg panasz érkezett, és hírneve jelentõsen csorbult az elmúlt hónapokban, jelenleg nincs abban a pozícióban, hogy kiemelt maradjon. Eltávolítva a kiemelés. (Gentleman engedélyével)[/mod]
1347
Fórum Archívum (Témák/Fórumok) / Re:HolidayRPG [ÚJRATÖLTVE]. By: HFG. \\"Hosting for Gamers\\" [Érdemes megnézni]« Dátum: 2013. január 11. - 18:51:13 »
Kétszer másoltad be ugyanazt.
1348
Általános / Palomino RPG beszélgetés« Dátum: 2013. január 11. - 17:45:02 »
[mod]Az elõbb kimoderált Gentleman pár HSZ-t. Amennyiben több ilyen is lesz, akkor a témát kettévágom a vita kezdeténél és társalgóban folytatjátok, és az elsõ személyeskedésnél zárva lesz. Maradjatok nyugodtak, és ne személyeskedjetek![/mod]
1349
Archívum / Virtual RPG !!! NINCS SZINT RENDSZER !!!« Dátum: 2013. január 11. - 17:39:44 »
[mod]Kösz hogy szóltál. L&A.[/mod]
1350
Archívum / New Life Studio Presents: New Life Role Play - "Egy új élet kezdete!"« Dátum: 2013. január 11. - 06:33:17 »
Emberek, semmi pánik! A zene csak egy a rengeteg szivatásból amit ez az AJ rendszer nyújt.
|