hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.06.16. 11:51



Jelenlévő felhasználók

Jelenleg 352 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 352 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 4 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: static vs. new
HozzászólásElküldve: 2016.01.25. 15:59 
Offline
A Scripter

Csatlakozott: 2013.11.19. 19:08
Hozzászólások: 827
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 315 alkalommal
[kozep]static vs new[/kozep]
Sziasztok mivel néha előfordul a stack hiba az az egy tömbnek túl nagy karakterhosszt adunk akkor az a plugin leáll. Kicsit gondolkoztam
és utána néztem, hogy ezt lehet-e orvosolni. És találtam rá megoldást. Itt van pár teszt eredménye.

TESZT 1# - 100 Karakterrel
new : Sikeresen elindul
static : Sikeresen elindul

TESZT 2# - 800 Karakterrel
new : Sikeresen elindul
static : Sikeresen elindul

TESZT 3# - 1500 Karakterrel
new : Sikeresen elindul
static : Sikeresen elindul

TESZT 4# - 3000 Karakterrel
new : Sikeresen elindul
static : Sikeresen elindul

TESZT 5# - 5000 Karakterrel
new : A szerver leállt
static : Sikeresen elindul

TESZT 6# - 10000 Karakterrel
new : A szerver leállt
static : Sikeresen elindul

TESZT 7# - 50000 Karakterrel
new : A szerver leállt
static : Sikeresen elindul

TESZT 8# - 200000 Karakterrel
new : A szerver leállt
static : Sikeresen elindul

TESZT 9# - 1000000 Karakterrel
new : A szerver leállt
static : Sikeresen elindul

TESZT 10# - 5000000 Karakterrel
new : A szerver leállt
static : Sikeresen elindul

Szóval a tesztek alapján a static 1000x jobb mint a new! (5 milliónál nem néztem tovább)

Tudom jól, hogy a vége felé már nagyon extrém eset és azt is, hogy biztos nem használja senki de, ha ezzel is tudunk memóriát spórolni akkor miért ne tegyük?
Egy-két helyen szükséges lehet. Pld: SQL mentés vagy betöltés, Motd megjelenítés. Itt azért lehet lényegesen fontos mert, ha túl sok adatot akarunk tárolni akkor a szerver egy stack hibát fog dobni. Ami ugye azt jelenti, hogy a pluginunk lefog állni. static-ot nem rendszeresítettem még egyik pluginomnál se, de most a közeledő pluginomban teszek vele egy próbát. Esetleg aki tudna a new mellett érvelni, hogy miért jobb az írjon csak kíváncsi lennék egy-két ember véleményére.

Köszönöm a figyelmet.

Forráskód:
Kód:
#include <amxmodx>

#define STATIC
#define ARRAY 100000

public plugin_init() {
   
   #if defined STATIC
      static Valami[ARRAY]
   #else
      new Valami[ARRAY]
   #endif
   
   formatex(Valami, ARRAY - 1, "Teszt | Max. Hossz: %d", ARRAY)
   log_amx(Valami)
}


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: static vs. new
HozzászólásElküldve: 2016.01.25. 18:35 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
Szerintem nem feltétlen a legjobb megoldás minden változót static kulcsszóval létrehozni. A legtöbb függvényben szükségtelen a plugin leállásáig tárolni az adatokat, illetve 1.6 -hoz nem hinném, h bárkinek is szüksége van több ezer karakter hosszú szövegekre.
Ha mégis bekövetkezne az utóbbi eset, vagy egy gyakran meghívódó függvényről van szó, akkor lehet értelme ( CmdStart, pre- / postthink ... ).

Szóval részemről:
Méretes tömböknél ( ~250+ elem ) és másodpercenként vagy kisebb időközönként meghívódó függvényeknél használok static kulcsszót változó definiáláshoz, egyéb esetben new.

Bár kétlem, hogy nagyon igénybe venné ez a gépet, inkább a feltételek / ciklusok ésszerű használatán kell dolgozni + megfelelő native -kt használni. Sok más dolog van amin lehet spórolni és nagyobb haszna van.
Pár szokásos hiba:
get_user_weapon -> pev_weapons / EV_INT_weapons
is_user_connected, is_user_alive együttes ellenőrzése -> csak is_user_alive
Szám / karakter egyenlőség ellenörzésnél -> if, else if, else ágak helyett switch
format <-> formatex
bool tages változók -> bitflag
...

Infó azoknak akik nem tudják mi a különbség:
A static kulcsszóval létrehozott lokális változó megmarad, megőrzi értékét a függvény lefutása után is, nincs szükség a függvény minden meghívásakor újra definiálni azt.

_________________
Néha itt, de többször nem.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: static vs. new
HozzászólásElküldve: 2016.01.25. 18:57 
Offline
A Scripter

Csatlakozott: 2013.11.19. 19:08
Hozzászólások: 827
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 315 alkalommal
Mindenhez nem kell static. De szerintem, ha lenne egy sql táblád amiben van 300 oszlop (Nekem pld ott van a gu) ott hasznát lehet venni. Bár mindenkinek más a véleménye és nem tudjuk meg mondani, hogy melyik a legjobb mert mindegyiknek van előnye, hátránya biztosan.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: static vs. new
HozzászólásElküldve: 2016.01.25. 19:02 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
Nagy tömböknél ajánlják mindenhol, h static -t használj, írtam is, de például egy deathmsg eventen belül felesleges szerintem.

_________________
Néha itt, de többször nem.


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 4 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 31 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole