메모리 모델(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
'프로그래밍' 카테고리의 다른 글
| 실행 중인 프로세스(Process)를 디버깅하기 (0) | 2026.01.24 |
|---|---|
| 비쥬얼 스튜디오 기능 톺아보기 - 필터 모드와 폴더 모드 (0) | 2025.11.30 |
| CP949와 UTF-8의 차이에 대해서 알아보자 (0) | 2025.04.21 |
| HTTP Header에는 한글이 포함될 수 없다! Header로 데이터 보내기 (0) | 2025.04.12 |
| 로커스트(Locust) @task vs tasks 비교해보자 (0) | 2025.04.09 |
댓글