#define SOME_TEXT "text"
jednak jest to bardzo złe podejście ale można je łatwo naprawić
Najpierw co się dzieje przy użyciu define preprocesor podczas przeszukiwania naszego kodu każde wystąpienie SOME_TEXT podmieni na "text". Potem przychodzi etap kompilacji i teraz każde wystąpienie ciągu znaków nie przypisanego do żadnej zmiennej ( tak zwane hardcoded ) czyli w naszym przypadku "text" zostanie dodane do sekcji DAT ( tam trzymane są wszystkie zmienne globalne i właśnie ciągi znaków ) . Inaczej mówiąc jeśli użyjemy 20 razy SOME_TEXT to "text" zostanie dodane do sekcji DAT 20 razy. Kompilator w żaden sposób tego nie optymalizuje.
I tak jest z każdym ciągiem znaków który jest hardcoded. Tak jak mowiłem możemy to łatwo naprawić.
Jeśli zamiast define użyjemy
new const SOME_TEXT[] = "text";i będziemy używać tej stałej zmiennej to wszystkie odwołania do niej będą polegały na odwołaniu się do tego samego adresu ( w pawn wszystkie tablice są przekazywane przez referencje )
Podsumowując ciąg znaków "text" wyląduje w sekcji DAT tylko raz i wszystkie odwołania do zmiennej SOME_TEXT będą działać na tym samym ciągu/miejscu w pamięci
Zarządzanie ciągami znaków w pamięci pluginu | DarkGL Blog