문자열의 메모리 크기

문자열의 메모리 크기

문자열 타입마다 메모리를 차지하는 방식이 달라요. 어떤 타입은 문자열 데이터를 힙(heap)에 할당하고, 어떤 타입은 스택(stack)에 두죠. 문자열 타입별 메모리 사용량을 표로 정리하면 아래와 같아요.

출처: String sizes

본문

표에서는 다음 기호 상수를 사용해요.

  • L은 문자열의 실제 길이예요.
  • HS는 Free Pascal 버전에 따라 달라지는데, Free Pascal 2.7.1 기준으로 16바이트예요.
  • UHS 크기는 모든 Free Pascal 버전에서 8바이트예요.
  • Windows에서는 WHS가 모든 버전에서 4바이트예요. 다른 플랫폼에서는 WideString 타입이 UnicodeString 타입과 같으므로 WHS가 UHS와 같아요.
String type Stack size heap size
Shortstring Declared length + 1 0
Ansistring Pointer size L + 1 + HS
Widestring Pointer size 2*(L + 1) + WHS
UnicodeString Pointer size 2*(L + 1) + UHS
Pchar Pointer size L+1

더 알아보기

문자열 길이가 길어질 때 어디에 메모리가 잡히는지 아는 것은 메모리 관리 측면에서 중요해요. 짧은 문자열(Shortstring)은 스택에 있고, AnsiString처럼 길이가 변하는 타입은 힙에 들어간다는 점을 기억하면 도움이 돼요.