To całkowicie zależy od platformy i reprezentacji.
Na przykład w .NET ciąg zajmuje dwa bajty w pamięci na punkt kodowy UTF-16. Jednak pary zastępcze wymagają dwóch wartości UTF-16 dla pełnego znaku Unicode w zakresie U + 100000 do U + 10FFFF. Forma w pamięci ma również narzut na długość ciągu znaków i ewentualnie dopełnienie, jak również na zwykły obiekt narzutowy wskaźnika typu itp.
Teraz, gdy piszesz ciąg na dysku (lub sieć, itp.) z .NET, określasz kodowanie (większość klas ma domyślną wartość UTF-8). W tym momencie rozmiar zależy w dużej mierze od kodowania. ASCII zawsze bierze jeden bajt na znak, ale jest bardzo ograniczony (bez akcentów itp.); UTF-8 daje pełny zakres Unicode ze zmiennym kodowaniem (wszystkie znaki ASCII są reprezentowane w jednym bajcie, ale inne zajmują więcej). UTF-32 zawsze używa dokładnie 4 bajty dla dowolnego znaku Unicode - lista jest długa.
Jak widać, nie jest to prosty temat. Aby obliczyć, ile miejsca zajmie ciąg, musisz określić dokładnie, jaka jest sytuacja - czy jest to obiekt w pamięci na jakiejś platformie (a jeśli tak, to która platforma - potencjalnie nawet do implementacji i ustawienia systemu operacyjnego) lub czy jest to surowa zakodowana postać, na przykład plik tekstowy, a jeśli tak, to które kodowanie.
W języku Delphi shortstring ma jeden dodatkowy bajt, ale inne typy ciągów mają dodatkowe cztery bajty. – inzKulozik
Wiem, ale krótkie struny są nazywane paskalami ;-). –
Bardzo dobra odpowiedź, krótka i słodka, od razu do rzeczy i zawiera najbardziej popularne przykłady z życia wzięte. –