Updated:

less than 1 minute read

개요

  • static, thread_local, extern, mutable
  • auto는 C++11, register는 C++17에서 삭제
  • 저장 기간(Storage duration)과 링크 방식(Linkage) 지정 가능
  • 저장 기간(Storage duration)
    • automatic
      • 코드 블록({})을 나가면 소멸
      • static, extern, thread_local 이외의 모든 지역 객체
    • static
      • 프로그램이 시작할 때 할당 되고 끝날 때 소멸
      • static 객체들은 프로그램에서 유일하게 존재
      • static, extern으로 정의된 객체
    • thread
      • 쓰레드가 시작할 때 할당 되고 종료될 때 소멸
      • 쓰레드들이 해당 객체들의 복사본을 가짐
      • thread_local 로 선언된 객체
    • dynamic
      • 동적 할당 함수를 통해서 할당 되고 해제되는 객체
      • new, delete로 정의되는 객체
  • 링크 방식(Linkage)
    • 모든 객체, 함수, 클래스, 템플릿, 이름 공간 등을 지칭하는 이름들에 적용되는 내용
    • No linkage
      • 블록({})안에 정의되어 있는 이름(extern 객체 제외)
      • 같은 블록안에서만 참조 가능
    • Internal Linkage
      • static으로 정의된 함수, 변수, 템플릿 함수, 템플릿 변수들 및 익명의 이름 공간에 정의된 함수나 변수들
      • 같은 소스 파일안에서만 참조 가능
    • External Linkage
      • No linkage, Internal Linkage 외
      • 다른 소스 파일에서 참조 가능