memory_model — 메모리 모델
memory_model — 메모리 모델
**메모리 모델(memory model)**은 C++ 추상 기계(abstract machine)의 관점에서 컴퓨터 메모리 저장의 의미론을 정의해요. 프로그램이 메모리를 어떻게 바라보고 접근하는지 규칙을 정해주는 개념이에요.
멀티스레드 프로그래밍을 하다 보면 "한 스레드가 쓴 값을 다른 스레드가 언제 보는가" 같은 질문이 생겨요. 메모리 모델은 이런 질문에 답하는 기반 규칙을 제공해요. 바이트·주소·메모리 위치 같은 기본 개념부터 시작해요.
출처: cppreference
본문
메모리 모델은 C++ 추상 기계의 목적을 위해 컴퓨터 메모리 저장의 의미론을 정의해요.
C++ 프로그램이 사용할 수 있는 메모리는 하나 이상의 연속된 바이트(byte) 시퀀스예요. 메모리의 각 바이트는 고유한 **주소(address)**를 가져요.
바이트 (Byte)
바이트는 메모리의 가장 작은 주소 지정 가능 단위예요. 연속된 비트 시퀀스로 정의되며, 다음을 담을 만큼 커야 해요.
- 모든
UTF-8코드 유닛의 값 (256개의 구분된 값) - 기본 실행 문자 집합의 모든 멤버 (C++23부터 기본 문자 리터럴 집합의 모든 요소의 일반 리터럴 인코딩)
C와 유사하게 C++도 8비트 이상의 바이트 크기를 지원해요.
char, unsigned char, signed char 타입은 저장과 값 표현 모두에 한 바이트를 사용해요. 바이트의 비트 수는 CHAR_BIT 또는 std::numeric_limits<unsigned char>::digits로 접근할 수 있어요.
메모리 위치 (Memory location)
메모리 위치는 비트 필드가 아닌 스칼라 타입 객체의 객체 표현이 차지하는 저장 공간이거나, 0이 아닌 길이의 연속된 비트 필드 시퀀스 중 가장 큰 것을 말해요.
언어의 다양한 기능(예: 참조, 가상 함수)은 프로그램이 접근할 수 없지만 구현이 관리하는 추가적인 메모리 위치를 수반할 수 있어요.
C++98에서 같은 저장 공간을 차지하는 객체들이 다른 메모리 위치로 간주되던 것이, 나중에 "메모리 위치는 이제 저장 공간을 가리킨다"로 정정됐어요.
같이 보기
- C 언어의 메모리 모델