C++ 프로그램에서 string 값을 어떤 변수에 담지 않고, 곧바로 값으로 표현한 것을 string literal 이라고 부른다.
그렇다면 string literal은 어디에 저장될까?
Heap memory는 일단 절대 아닐 것이고,
그렇다면 Stack 인가?
정답은 둘다 아니다..
[저장되는 위치]
○ 스트링 리터럴은 대부분 내부적으로 메모리의 읽기 전용 영역에 저장된다.
▶ '대부분'인 이유는 이 동작이 platform 마다 다를 수 있기 때문이다.
▶ 하나의 예로, 간단한 구조를 가지는 칩에서는 read-only memory segment를 지원하지 않을 수 있기 때문에 writable 할 수 있다.
○ 읽기 전용 영역에서 데이터 영역
[저장되는 방식]
○ string은 static storage duration을 가진다.
▶ 변수들에는 각각 lifetime이 존재하는데, string literal은 static storage durtaion을 가진다.
▶ 프로그램 시작부터 종료까지
○ 컴파일러는 같은 스트링 리터럴이 코드에 여러 번 나오면 그 중 한 스트링에 대한 레퍼런스를 재사용 하는 방식으로 메모리를 절약한다.
▶ 이를 literal pooling(리터럴 풀링) 이라고 한다.
반응형
'Programming > Modern c++' 카테고리의 다른 글
std::string_view (0) | 2022.06.13 |
---|---|
[Benchmark] Passing std::string as function parameter (1) | 2022.06.12 |
C++ 표준 난수 라이브러리 <random> (0) | 2022.04.07 |