String Pool

Gruparea șirurilor se referă la două tipuri de optimizări ale compilatorului legate de șiruri : 

  1. Reducerea cantității de cod prin combinarea acelorași linii din module diferite.
  2. Atribuții de șiruri leneșe folosind un contor de referință ( copy-on-write ).

Combinarea șirurilor de caractere din diferite module

Când procesează codul sursă , compilatorul trebuie să plaseze fiecare șir literal în metadatele modulului gestionat. Dacă o singură linie apare de multe ori în codul sursă, plasarea tuturor acestor linii în metadate va duce la creșterea fișierului rezultat.

Pentru a preveni creșterea codului, multe compilatoare (inclusiv compilatorul C# ) stochează doar o singură instanță a unui șir literal în metadatele modulului. Compilatorul înlocuiește toate referințele la acest șir din codul sursă cu referințe la instanța sa din metadate. Acest lucru reduce semnificativ dimensiunea modulului. Metoda nu este nouă - acest mecanism există de mult timp în compilatoarele C / C++ . În compilatorul Microsoft C/C++, acest lucru se numește grupare de șiruri. Acesta este un alt instrument care vă permite să accelerați procesarea șirurilor.

Atribuții de șiruri leneșe

De obicei, un șir este un obiect mare care necesită un bloc mare de memorie pentru funcționarea sa . Această optimizare alocă memorie pentru șiruri numai atunci când este necesar, permițând mai multor variabile să indice același șir de caractere. Numai dacă una dintre variabile își schimbă conținutul, șirul este copiat.

O optimizare similară există în limbajele colectate de gunoi sub forma în care un șir este un obiect imuabil, iar atribuirea a=bnu creează un șir nou. Dezavantajul acestei soluții este că programatorul trebuie să cunoască și să folosească un mecanism intern de construcție a șirurilor de caractere precum StringBuilder( Java ).

Literatură

Link -uri