[TuT] Optimizacija koda

Započeo LordShigi
1. Avg. 2010. Zaključano
4,312
pregleda
6
postova
LordShigi
5
Crime Lord
1. Avg. 2010.
DUŽINA STRINGOVA

Uvod
Većina PAWN skriptera je nekako zaključila da dužina svakog stringa mora biti 256. Isto tako su zaključili da je najveći mogući string veličine 256. Za to su najverovatnije kriv GodFather koji je skoro najviše korišteni gamemod u SA:MPu. U GodFatheru su SVI stringovi 256. I kada pocetnik skripter promatra skriptu vjerovatno je to svjesno ili nesvjesno uočio i sad to koristi

Objašnjenje stringa

String u PAWNu je zapravo array slova. On je null terminated odnosno završava s \0 (ASCII kod: 0)


new
string = "Pozdrav";

Taj string je zapravo dug 8 čelija zbog toga jer je duljina teksta 7 čelija te još jednu čeliju zauzima /0.

To se može napisati i ovako

new
string = {'P','o','z', 'd','r', 'a','v','\0'};


Ili:

new
string = {80, 111, 122, 100, 114, 97, 118, 0};

Znači 80,111,122,100,114,97 i 118 su slova a 0 je null terminator koji završava string.

Kada vi napravite ovo:

new
string;

Vi zapravo svaki cell od njih 256 stavljate na 0 što traje

Zašto ne koristiti 256?
  • Sporo je:

Sporo je zbog toga jer vi stavljate 256 cellova na 0 što traje.
  • Netreba vam:

Predpostavimo da je vaš najveći admin level 9999. I što se onda događa. Recimo da želite formatirati string da ispiše vaš admin level:
format(string,sizeof(string),"Moj admin level je %i", adminlvl);
I sad imamo 20čelija teksta + MAXIMALNO 4čelija koje nam trebaju za adminlvl + 1čelija za null(/0)
Znači da nam treba MAKSIMALNO 25 čelija. Ako vi stavite 256 onda zauzmete 924bajta u serverskoj memoriji koji vam za ništa ne služe (to je skoro kilobajt !!!)
  • Maksimalni input u SA:MPu je 128

S obzirom da je najveći mogući input u SA:MPu 128 slova, zašto koristiti duplo veći string da bi ga spremili?
  • Maksimalni output u SA:MPu je 128

Ako radite komandu tipa /ooc, nemojte koristiti 256 zbog toga jer je najveći mogući output 128 pa bi onda bezveze napravili 512bajta u serverskoj memoriji ako ih nikad nećemo koristiti.
  • Netreba vam (2)



public OnPlayerCommandText(playerid, cmdtext[])
{
new
string,
cmd;
cmd = strtok(cmdtext, idx);
if (strcmp(cmd, "/broj", true) == 0)
{
format(string, sizeof (string), "Nasumicni broj: %d", random(27));
SendClientMessage(playerid, 0xFF0000AA, string);
}
}

Ovdje je puno stvari loše napravljeno. Za početak koristi se strtok i loš procesor komandi. Ali to ću obraditi sljedeći put.


new
string,
cmd;

Zašto dvije, kada već server zna koja komanda je stisnuta zašto ponovo ne iskoristiti isti string kada vam više netreba. Samo povecavate duljinu i količinu podataka na serveru.


new
string;

Zašto 256 kad je najveći input/output SA:MPa 128.

Bolja verzija bi bila

public OnPlayerCommandText(playerid, cmdtext[])
{
new
string; // cmdtext nikad neće biti veći od 128
string = strtok(cmdtext, idx);
if (strcmp(string, "/broj", true) == 0)
{
format(string, sizeof (string), "Nasumicni broj: %d", random(27));
SendClientMessage(playerid, 0xFF0000AA, string);
}
}


Kada da koristim 256?
Kada je potrebno, ponekad su veliki stringovi i više nego potrebni. Najčešće u SQL queryima i čitanju podataka, ali i onda vrijedi sve ovo gore.
  • SQL

SQL querysi mogu biti jako dugi, ali opet vrijedi sve ovo gore. nemojte stavljati 256, 512 ili 1024 čim vidite query.
  • ÄŒitanje fajlova

U slučaju kad neznate koliko će biti velik fajl koji čitate se može koristiti 256 samo da pokrijete sve mogučnosti.

CREDITS: LordShigi - Pisanje Tutoriala
Y-Less pisanje tutoriala na engleskom s kojeg su preuzeti mnogi sadržaji.
marac
3
Hustler
1. Avg. 2010.
odlicno. brate. sam nist jos ne kontam. xD
Johnâ„¢
5
Godfather
1. Avg. 2010.
Odlicno si to napravio! Vidio sam to na SA:MP forumu od Y-Lessa, ali sad je ovo super sto je sad i na Balkan SA:MP-u 😉
bero
5
Underboss
1. Avg. 2010.
Lijepo i korisno...Pomoci ce mogima 😉
[CH]pliva
4
Made Man
1. Avg. 2010.
hehe čelije,to si uzeo za nekog translatora,ja to zovem polja.
LordShigi
5
Crime Lord
1. Avg. 2010.
Ne, nego preveo kako treba. To ti se tako prevodi u hrvatskom.

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha