본문 바로가기
C++/Unmanaged C++ 강좌 노트

[C++]std::string C++의 신 기능은 항상 우월한가?

by 계양구놈팽이 2023. 3. 1.

Udemy에서 C++ 언매니지드 프로그래밍을 수강하면서 배운 내용을 정리한것 입니다.

<sstream>

  • std::istringstream
    • std::cin과 비슷: 키보드 대신 string으로부터 읽어옴
    • sscanf()와 비슷
  • std::ostringstream
    • std::cout와 비슷 : 콘솔 대신 string에 출력함
    • sprintf()와 비슷
  • cout, cin도 스트림이다.
하지만 자주 쓰이는 기능은 아님

 

현업에서 C++ 개발을 할때 , C 헤더를 써도 될까요?

  • 현업의 C++ 애플리케이션에서는 여전히 성능 상의 이유로 많은 C 함수들을 사용.
C C++
<string.h>
<stdio.h>
<ctype.h>
<cstring>
<cstdio>
<cctyoe>

 

그럼에도 std::string class는 정말 유용하다!

성능 이전에 문자 배열 길이에 대한 고민이 줄어들어 개발자의 실수로 인한 에러를 방지하는데 도움을 준다.

하지만, 강의에서 이게 어떻게 해서 가능한 지 고민하는 자세가 중요.

1단계

2단계

  • 그림에 나오는 두번째 메모리 블럭의 '\0' 는 null caracter 이다.

3단계

그림에 나오는 것처럼 최초에 라인 문자열을 만들었을 때 할당 받은 16바이트의 공간을 넘어서는 새로운 문자열이 추가 되었다. 그러면 아래 그림과 같이 새롭게 이사 갈 곳을 준비한다.

4단계

이전한 곳으로 line 문자열에 저장되어 있던  'word'를 새롭게 할당 받은 주소로 옮겨준다.

5단계

복사가 되면 이전에 할당 받은 메모리 공간은 필요 없으니 반환을 해줍니다. 16바이트의 메모리가 반환 됩니다.

그리고 이전 메모리에 포인팅하고 있던 주소값도 새롭게 이전한 메모리로 포인팅 해줍니다.

 

생각보다 복잡한 string의 구조

  • 힙메모리는 반환은 빠르지만, 할당은 느림
  • 메모리 단편화 문제
    • 메모리 썻다 지웠다 반복하면 구멍이 생
  • 내부 버퍼의 증가는 멀티 쓰레드 환경에서 안전하지 않을 수도 있음
  • C++를 주로 쓰는 업계에 대하여 생각 해보자 (게임, 임베디드)
  • 그래서, 여전히 sprintf와 함께 char[]를 매우 많이 사용

 

'C++ > Unmanaged C++ 강좌 노트' 카테고리의 다른 글

[C++]인라인 함수  (0) 2023.03.04
[C++]Static(정적) 키워드  (0) 2023.03.03
[C++]파일 입출력(I/O)  (4) 2023.03.01
[C++]bool과 참조 C++ 새로운 기능  (2) 2023.03.01