본문 바로가기
프로그래밍

메모리 모델(Memory Model)이란?

by bantomak 2026. 2. 24.
반응형

메모리 모델(Memory Model)

메모리 모델이란, 여러 개의 스레드가 공유 메모리에 접근할 때, 어떤 순서로 데이터가 보일지 정의한 약속 또는 규칙을 말한다.

CPU와 컴파일러는 성능을 위해 우리가 짠 코드의 실행 순서를 멋대로 바꾸곤 하는데, 이때 메모리 모델은 그 멋대로의 허용 범위를  결정한다.

메모리 모델의 두 가지 측면

  • 원자성(Atomicity) : "데이터를 수정할 때, 중간 단계가 다른 스레드에 보이지 않게 하라"
    예를 들어, 64비트 데이터를 저장할 하위 32비트만 먼저 저장되어 이상한 값이 읽히는 상황을 방지하는 규칙이다.
  • 가시성과 순서(Visibility & Ordering) : 한 스레드가 수정한 내용이 언제, 어떤 순서로 다른 스레드에게 보일 것인가?

C++ 11 이전과 이후의 차이

사실 2011년 이전의 C++ 에는 표준적인 메모리 모델이 없었다.

  • C++ 11 이전: "멀티스레딩은 OS(Window, Linux)가 알아서 할 일이지, 언어의 영역이 아니다"라고 생각했다. 그래서 하드웨어마다 동작이 제각각이었고 이식성이 낮았다.
  • C++ 11 이후: 언어 차원에서 `C++ 메모리 모델`을 공식 정의했다. 이제 프로그래머는 하드웨어가 인텔인지 ARM인지 고민할 필요 없이, 표준에서 제공하는 std::atomic 또는 memory_order만 사용하면 모든 환경에서 동일한 논리로 동작하는 코드를 작성할 수 있게 되었다.

정리하자면

서로 다른 하드웨어의 특성을 하나로 추상화하여, 개발자가 어떤 환경에서도 일관되고 안전하게 멀티스레드 프로그래밍을 할 수 있도록 돕는 `가상의 보호막`이라고 이해하면 쉽다.

함께 읽으면 좋은 글

 

C++11 introduced a standardized memory model. What does it mean? And how is it going to affect C++ programming?

C++11 introduced a standardized memory model, but what exactly does that mean? And how is it going to affect C++ programming? This article (by Gavin Clarke who quotes Herb Sutter) says that, The m...

stackoverflow.com

 

The C++11 Memory Model - SlideServe

The C++11 Memory Model. CDP 2012 Based on “C ++ Concurrency In Action” by Anthony Williams and The C++11 Memory Model and GCC Wiki Created by Eran Gilad. Reminder: what is a memory model?.

www.slideserve.com

댓글