A kérdés az, hogy miért nem adhat vissza egy vonalat a hívott funkciók archívumában - a pro zálog - portálról

A mod írásakor úgy döntöttem, hogy egy ilyen szélsőségre megyek: visszaadja a karakterlánc értékét. A fórumnak van egy optimalizálási témája. Azt írják, hogy nem szabad megtenni, és azzal fenyeget, hogy túlcsordul a köteg. Szeretném látni azt a kódot, amely ezt a túlcsordulást okozhatja, hogy visszaadjon egy zsineget a mosogatóban.

A téma példát ad a játékos becenevére. Ezt tettem:

CMD: go (playerid, params [])
a (új i; i<=1000;i++)
nyomtatás (PlayerName (playerid));
nyomtatás ("kész");
>

stock PlayerName (playerid)
új pname [MAX_PLAYER_NAME];
GetPlayerName (playerid, pname, sizeof (pname));
return pname;
>

Nem vettem észre semmi különlegeset. Minden rendesen működött. Tehát hogyan okoz egy köteg túlcsordulását, hogy visszaadjon egy sztringet?

És ne adj vissza 24 cellát, de például 2048-at

készlet get_crash ()
új src [2048] = "Ez a kód okozza a szerver számára a futásidejű hiba kiadását";
return src;
>
és csatlakoztassa a crashdetect-et.

És igen, Nick már régóta kapott az OnPlayerConnect-ben, majd hívja azt a tömböt, amelyben a becenevet felvették

És igen, Nick már régóta kapott az OnPlayerConnect-ben, majd hívja azt a tömböt, amelyben a becenevet felvették
Ez érthető, a példa az optimalizálás témájából származik.

készlet get_crash ()
új src [2048] = "Ez a kód okozza a szerver számára a futásidejű hiba kiadását";
return src;
>
Nos, miért visszaküldenek ilyen hatalmas cellák száma, van ilyen olyan dolog, ha nem 2048, hanem 128, akkor minden jól működik, hiba nélkül.

Ez az, ha egy ilyen lefolyás, de ha több van közülük?

Nos, miért visszaküldenek ilyen hatalmas cellák száma, van ilyen olyan dolog, ha nem 2048, hanem 128, akkor minden jól működik, hiba nélkül.

Nos, tetszik ez?

fő ()
új dest [4070];
PlayerName ();
nyomtatás (dest);
>
stock PlayerName ()
új pname [MAX_PLAYER_NAME];
pname = "Azaza";
visszatérés PlayerName;
>
És nézd meg a foglalkoztatottak száma köteg (kivéve, ha a debug módban, mielőtt ezek megy a mappát pawno és épített ott „pawn.cfg” fájlt, amely felsorolja a „-D3”, és miután már összeállított).
És utána

visszatérés PlayerName;
cserélje ki

visszatérés 1;
És nézz újra.

Egy egység visszaváltásával a verem 4105 cellát foglal el (4105 * 4 = 16420 byte), és a tömb visszatérésével már 4130 (4130 * 4 = 16520 byte) lesz elfoglalva.
Azaz, ha tömböt ad vissza, akkor a verem vesz 2-szer nagyobb teret (először létre a lefolyóba, majd a függvény, ahol a hívás áramlás van fenntartva annyi memóriát, így a kapott eredmény az volt, hogy hol tárolják).
Ha mindezt az új.pwn-ban hajtja végre, ahol 100 cellánként csak egy tömb lesz, és 50 cellát tartalmazó tölcsér lesz, akkor biztosan nem lesz semmilyen probléma. De ha egy teljes mod van, amely már egy tucat tömböt tartalmaz, csak egy játékmódon, és még egy tucat visszatérítést fogsz csinálni. Tudja, a köteg nagyon gyorsan befejeződik


Ez érthető, a példa az optimalizálás témájából származik.

Nos, miért tér vissza ilyen hatalmas számú sejt, van ilyen?

És igen. Ne mondd el a gopat, amíg nem ugorsz át. A szükségletek eltérőek, és ha még nem találkoztál vele, akkor nem jelenti azt, hogy ez nem lehet

Nos, tetszik ez?

fő ()
új dest [4070];
PlayerName ();
nyomtatás (dest);
>
stock PlayerName ()
új pname [MAX_PLAYER_NAME];
pname = "Azaza";
visszatérés PlayerName;
>
És nézd meg a foglalkoztatottak száma köteg (kivéve, ha a debug módban, mielőtt ezek megy a mappát pawno és épített ott „pawn.cfg” fájlt, amely felsorolja a „-D3”, és miután már összeállított).
És utána

visszatérés PlayerName;
cserélje ki

visszatérés 1;
És nézz újra.

Egy egység visszaváltásával a verem 4105 cellát foglal el (4105 * 4 = 16420 byte), és a tömb visszatérésével már 4130 (4130 * 4 = 16520 byte) lesz elfoglalva.
Azaz, ha tömböt ad vissza, akkor a verem vesz 2-szer nagyobb teret (először létre a lefolyóba, majd a függvény, ahol a hívás áramlás van fenntartva annyi memóriát, így a kapott eredmény az volt, hogy hol tárolják).
Ha mindezt az új.pwn-ban hajtja végre, ahol 100 cellánként csak egy tömb lesz, és 50 cellát tartalmazó tölcsér lesz, akkor biztosan nem lesz semmilyen probléma. De ha egy teljes mod van, amely már egy tucat tömböt tartalmaz, csak egy játékmódon, és még egy tucat visszatérítést fogsz csinálni. Tudja, a köteg nagyon gyorsan befejeződik

És igen. Ne mondd el a gopat, amíg nem ugorsz át. A szükségletek eltérőek, és ha még nem találkoztál vele, akkor nem jelenti azt, hogy ez nem lehet

Köszönöm a választ, mindent megértettem)