1. 스택 프레임
스택 프레임이란? 스택 영역에 함수를 구분하기 위해 생성되는 공간 이다.
각 함수별로 스택프레임이 생성되어 저장된다.
그렇다면 왜 함수별로 구분해야 하는 것일까?
가장 중요한 이유는 검색을 해도 나오지 않는다. 이유를 아는 것이 스택 프레임을 이해하는 핵심이다.
동작 원리를 보면 esp, ebp 등의 용어와 어려운 과정이 나오지만, 이것은 중요하지 않다.
컴퓨터가 프로그램을 실행할 때,
코드영역에서 코드를 읽으며 필요한 데이터를 데이터,힙,스택영역에서 레지스터로 가져온다.
cpu는 레지스터 값을 가지고 연산을 하고, 결과물을 다시 저장영역에 돌려준다.
데이터를 가져올 때 필요한 것이 스택이다.
데이터영역은 전역변수나 상수만 저장되기 때문에 한번 읽으면 끝이다.
나머지 변수는 코드를 실행할 때마다 다시 읽어야 한다.
왜냐하면 변수이기 때문에 이전에 읽어들인 값이 지금 값과 같지 않을 수 있기 때문이다.
힙 영역에 접근할때도 스택이 필요하다.
데이터가 힙에 저장 되어 있더라도, 그 데이터에 접근하기 위한 변수(포인터)는 스택에 저장되기 때문이다.
스택은 스택 자료구조 형태로 저장되고 최상단에 있는 스택프레임이 현재 실행하고 있는 프로그램에 필요한 변수가 저장되어 있다. 즉 컴퓨터는 현재 연산을 수행할 때, 가장 위에 있는 스택프레임만 보면 되는 것이다.
예를 들어 국어사전에서 '스택'이란 단어를 찾는다고 가정해보자.
이때 우리는 국어사전 1페이지부터 스택이 나올때까지 찾지 않는다.
단숨에 'ㅅ'에 있는 곳으로 가고, 그곳에서 다시 'ㅡ'를 찾고 거기서부터 차례로 찾아보기 시작할 것이다.
스택프레임은 우리가 사전에서 단어를 찾는 과정과 같은 역할을 하는 것이다. (일종의 책갈피)
그렇다면 왜 스택구조(후입선출)로 쌓는 것일까?
프로그램은 순차적으로 실행하기 때문에 가장 최근에 할 일을 가장 위쪽에 위치하게 하는 것이다.
https://velog.io/@1unaram/Stack-All-in-One
[Study] Stack All-in-One
Stack, Stack Frame에 대해서 자세하게 정리하였습니다.
velog.io
2. 메모리 누수
메모리 누수란 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상을 말한다.
주로 동적할당을 할때 발생된다. 스택은 스택오버플로우가 발생하면 바로 에러를 뱉어버리기 때문에 쉽게 알 수 있다. (용량도 작다.) 하지만 동적할당이 이루어지는 힙영역은 문제 없이 잘 동작할 수도 있기 때문에 이런 누수 현상이 발생하는 것이다. 힙 영역은 용량이 크기 때문에 누수 현상이 발생해도 알아차리기 어렵다.
누수현상이 발생하면 프로그램이 불안정해지고 컴퓨터도 느려진다. 요즘 컴퓨터는 램 용량이 부족할 시 하드디스크를 램처럼 끌어와 쓴다. 당연히 하드는 램보다 느리므로 컴퓨터가 느려지는 것이다.
3. 가비지 컬렉션
메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.
즉, 동적 할당된 메모리 영역 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제하는 기법이다.
장단점이 있지만, 가비지 컬렉션이 실행되는 시점을 개발자가 알 수 없기때문에 정밀한 프로그램에서는 사용을 지양한다.
4. 메모리 단편화
메모리를 100% 활용하면 좋겠지만, 그러지 못하는 경우를 말한다.
내부 단편화와 외부 단편화가 있다.
내부 단편화는 10으로 충분히 할 수있는 일인데 20이 할당된 경우를 말한다. 이 경우 10이 낭비 된다.
외부 단편화는 메모리 공간은 충분하지만, 중간 중간 메모리 점유로 할당하지 못할 경우를 말한다.
이를 해결하기 위한 여러방법이 존재한다. 이 작업은 운영체제가 알아서 한다.
https://jeong-pro.tistory.com/91
메모리 단편화(Memory Fragmentation)가 무엇이고 왜 발생하는가?
메모리 단편화가 무엇이고 왜 발생하는가? 메모리 단편화 - RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태를 보고 메모
jeong-pro.tistory.com
'게임개발 수업' 카테고리의 다른 글
STL vector (0) | 2022.11.08 |
---|---|
STL 구성요소 (0) | 2022.11.08 |
메모리 구조 (0) | 2022.10.26 |
2022-10-11 자료형, 연산자 우선 순위 (1) | 2022.10.11 |
2022-10-07 컴파일 과정 (0) | 2022.10.11 |