Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

"tekst", czy consty?


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 Ossal

    Wszechwidzący

  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 07.05.2015 23:29

Plugin ma powiedzmy ze 10 różnych komunikatów, czy "taniej" jest zamiast zwykłego tekstu użyć zmiennej const?
W przypadku client_print(id,3,Komunikat[1]) odwołuję się do miejsca w pamięci, czyli liczby, tak?
Czyli opłaca się zamienić wszystkie komunikaty w formie "jakiś tekst" na stałą zmienną globalną? Z góry dzięki :)


  • +
  • -
  • 0

#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 08.05.2015 10:04

Żeby to zrozumieć, musisz zrozumieć jak działa kompilator i prekompilator.

 

Zacznijmy od prekompilatora:

#define TEKST_A "to jest jeden tekst"
#define TEKST_B "to jest drugi tekst"
 
console_print(id, TEKST_A);
console_print(id, TEKST_A);
console_print(id, TEKST_B);

 

prekompilator taki kod przed właściwą kompilacją zamieni na:

console_print(id, "to jest jeden tekst");
console_print(id, "to jest jeden tekst");
console_print(id, "to jest drugi tekst");

 

Co oznacza, że string "to jest jeden tekst" występuje w kodzie 2 razy, "to jest drugi tekst" występuje jeden raz. W prekompilatorze nie masz pojęcia zmiennych, masz tylko definicje. Prekompilator sam za Ciebie zmiennej nie utworzy.

 

Jak kompilator zinterpretuje powstały kod? Do każdej funkcji przekaże stałą znakową, co oznacza że w skompilowanym pluginie wystąpią 3 stałe tekstowe. Zastosowanie stałych w tym przypadku nie zmieniło w jakikolwiek sposób działania pluginu, zmiana jest wyłącznie dla kogoś kto później kod edytuje bo nie musi w 10 miejscach zmieniać napisu, wystarczy w jednym.

 

Teraz zmiana:

new TEKST_A[] = "to jest jeden tekst";
new TEKST_B[] = "to jest drugi tekst";
 
console_print(id, TEKST_A);
console_print(id, TEKST_A);
console_print(id, TEKST_B);

 

tutaj prekompilator nie ma nic do roboty. Kompilator natomiast zrobi coś innego: utworzy 2 zmienne: TEKST_A i TEKST_B, a następnie te zmienne przekaże w 3 wywołaniach funkcji. Przekazanie zmiennej do funkcji kosztuje nas 4 bajty, każdy znak tekstu również kosztuje nas 4 bajty. Oznacza to, że dla TEKST_A zaoszczędziliśmy trochę pamięci (72 bajty: tekst ma długość 19 znaków + znak null na końcu, daje to 80 bajtów mniej bo tekst wystąpił 1 raz mniej, jednak po 4 bajcty zużywamy na przekazanie zmiennej do funkcji), ale dla TEKST_B zużyliśmy o 4 bajty więcej.

 

Co jest lepsze? sam oceń.

 

Pamiętaj, że dotyczy to tylko stringów i tablic. Każda zmienna nietablicowa (string jest tablicą przecież) zajmuje 4 bajty. Przekazanie jej do funkcji również 4 bajty, użycie więc zmiennych zamiast definicji zużyje dodatkowo 4 bajty pamięci.

 

Oczywiście mówimy tu o zajętości pamięci RAM.


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 08.05.2015 11:01

http://darkgl.pl/201...amieci-pluginu/


  • +
  • -
  • 1

#4 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 08.05.2015 12:19

Dark'u to co wrzuciłeś już kiedyś czytałem przeglądając Twojego bloga :)
Jeżeli chodzi o define to ich nie używam, a na pewno nie do stringów, ewentualnie liczby, ale prekompilator to także enum'y, tak?
Gwyn namieszałeś mi w głowie trochę :D Rozumiem, że darować sobie podmiany komunikatów na consty, tak? :)


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych