Stack Variables 스택 변수
: 변수가 많아질수록 메모리 공간이 위로 쌓여간다고 하여 stack.
컴퓨터가 변수를 인식/접근하는 방법
: 메모리 맵에서 가장 위에서부터 몇 번째에 위치하고 있는지로 구분한다. 변수의 이름을 기억하지 않는다.
예제)
이 때, 우리가 생각하는 추상적인 메모리 구조는 이런 느낌이다.
하지만, 실제 작동하는 stack 메모리 구조를 추상적으로 표현해 보면 이런 식이다.
각 변수의 주소를 출력해서 실제로 그런지 확인해 보자.
Stack 메모리의 주소가 큰 수(a)에서 작은 쪽으로(d) 쌓여 나간다는 것을 실제로 확인해 볼 수 있다.
즉 이런 식이다!
더 로우 레벨로 내려가면
실제 메모리 구조는 격자 무늬로 되어 있다. 그렇다면 이런 모양으로 구성되었을 것이다.
주의점!
: 메모리 주소가 쌓여간다고 했는데, 실제로 보니까 쌓여 갈수록 증가하는 게 아니라 쌓여갈수록 감소하고 있다.
어떤 방식으로 메모리를 할당하는지에 따라 달라질 수 있지만, 적어도 unix 기반의 gcc, clang 컴파일러 등에서는 밑의 그림과 같이 스택 메모리의 변수가 찰 때마다 메모리 주소가 감소하는 방향으로 쌓여가게 되는 것이다.
결론
(1) 스택 메모리는 아래에서 위로 쌓인다.
(2) 변수에 접근할 때 탑에서 바텀으로 접근한다.
(3) 로우 레벨에서는 격자 무늬 속에서 각각의 변수가 사이즈에 맞는 공간을 차지하고 있다.
(4) 프로세스가 실행될 때, 맨 아래가 주소가 가장 작은 메모리 공간, 맨 위가 가장 큰 메모리 공간이라고 한다면, 스택 메모리는 위(TOP)에서 시작되어서 변수가 메모리 공간에 찰 때마다 아래(Bottom) 방향으로 하나하나 들어가게 된다. 즉, 스택이 쌓이는 방향은 메모리의 주소가 감소하는 방향으로 쌓여간다.
'모던C++ > 메모리 구조 Memory Structure' 카테고리의 다른 글
7. 힙 스택 스태틱 Heap Stack Static - 언제 어떻게 사용해야 할까 (0) | 2022.07.06 |
---|---|
6. 힙 메모리 Heap Memory 에 대한 모든 것 (2) - 예제 + Memory Leak 메모리 릭 방지 (0) | 2022.07.01 |
5. 힙 메모리 Heap memory 에 대한 모든 것 - Heap vs Stack (0) | 2022.06.30 |
4. 스택 메모리 - 스택 프레임 Stack Frame, Call Stack, this (0) | 2022.06.16 |
3. 메모리 속 변수 타입 Variable Types - Struct, class, 포인터의 크기 (0) | 2022.06.16 |
2. 메모리 속 변수 타입 Variable Types - sizeof(), Array, Pointer, int... (0) | 2022.06.16 |