# std::string의 size
std::string의 size는
오래된 컴파일러의 라이브러리에서는 8byte
모던 STL에서는 32byte or 40byte를 차지한다
# std::string의 내부 구조
8byte인 경우는
스택에 std::string의 8바이트 주소를 가지고 있고
힙에 "abc"가 있고 끝 부분에 size와 capacity가 포함된다
32byte or 40byte인 경우는
스택에 std::string의 8바이트 주소와 size, capacity, 그 외의 정보가 들어가고
힙에 "abc"가 있다
# std::string의 문제
자주 쓰이는 변수 타입들은 대부분 스택에 들어간다
그러나 std::string은 힙에 할당이 되기에
속도와 효율의 문제가 발생한다
이를 해결하기 위해서
32byte가 std::string의 size라는 가정하에,
32byte 미만의 std::string은 스택에 올라가도록 설계되었다
물론 템플릿 라이브러리마다 이 크기가 다르지만
대부분 16byte 미만의 std::string이라면
힙에 올라가지 않고 스택에 올라간다
# string_view
C++ 17부터는
string_view를 지원하고
이는 std::string의 주소와 size를 포함하는 pair의 형태로 구성되어 있어서
속도는 훨씬 빠르고
read only로만 사용이 가능하다
'C++ > [노코프] Tips' 카테고리의 다른 글
[C++ Tips] static (0) | 2024.04.07 |
---|---|
[C++ Tips] extern vs. static (0) | 2024.04.07 |
[C++ Tips] 상속의 문제점 (0) | 2024.04.06 |
[C++ Tips] Virtual Function (0) | 2024.04.06 |
[C++ Tips] 클래스/구조체 멤버 정렬 (0) | 2024.04.05 |