[컴퓨터] 메모리구조
동적할당(malloc, free), 정적변수(static) 등을 사용하다보면 각각 얘네들이 왜 이런 동작을 하는지에 대한 의문이 생긴다.
이를 이를 알기위해선 운영체제가 제공하는 메모리 공간에 대해 공부해야한다.
메모리
기본적으로 컴퓨터는 크게 3가지 장치라고 말할 수 있다.
HDD - 파일을 저장(장기) RAM - 실행할 파일을 저장(휘발성) CPU - 파일을 실행
CPU는 초당 10억번의 연산을 수행할 수 있다.
다만, 담을 수 있는 용량이 그리 크지 않다.
그래서 우린
- 게임을 설치(HDD에 저장)하고,
- 게임을 실행(RAM에 게임의 실행파일이 옮겨감)
- 게임을 하는 것(CPU가 연산)
이다.
컴퓨터의 메모리를 나눠보면 1byte(0 ~ 255)의 값을 가지는 셀들의 연속이라고 볼 수 있다.
이 셀들은 각각 1개의 값을 기억하고 있다고 생각하면된다.
각 셀들의 사이즈를 몇 개라도 칭해도 되지만, 일반적으로는 1byte라고 말한다.
각 셀들은 숫자를 가지는데, 각 숫자는 주소를 의미한다.
메모리 공간
컴퓨터의 운영체제는 프로그램을 실행하기 위해 다양한 메모리 공간을 제공한다.
대표적으로 알아야하는 메모리공간은 총 4가지이다.
영역 | 설명 | 주소 |
---|---|---|
code(text) | 실행할 프로그램의 코드 | 낮은 주소 |
data | 전역 변수와 정적변수 실행할때 크기가 결정된다. | |
stack | 지역변수, 매개변수, 컴파일할때 크기가 결정된다. | |
heap | 사용자의 동적할당 | 높은 주소 |
- 코드영역(텍스트 영역)
실행할 프로그램의 코드가 저장되는 영역이다, 텍스트 영역이라고도 불린다.
CPU는 레지스터에서 실행할 프로그램의 시작주소를 가져가서 하나씩 처리하게된다.
- 데이터 영역
메모리의 데이터 영역은 전역 변수와 정적 변수가 저장되는 영역이다.
프로그램이 시작됨과 동시에 메모리에 할당되고, 프로그램이 종료되면 자연스럽게 소멸한다.
- 스택
함수가 호출되면 그 함수의 안에서 매개변수와 지역변수가 자동으로 선언된다.
스택 영역은 함수의 호출과 함께 할당되고, 함수가 종료되면 자연스럽게 소멸한다.
이런 스택은 기본적으로 후입선출의 방식에 따라 동작한다.
스택 영역은 메모리주소가 높은 주소로부터 낮은 주소 방향으로 할당된다.
- 힙
사용자가 직접 관리하는 영역이다.
사용자가 malloc, free, delete 등을 하게되면, 메모리 공간이 동적으로 할당된다.
이때, 동적할당 전의 메모리값은 Garbage(쓰레기, 임의)의 값이므로 초기화가 필요하다.
힙 영역은 메모리주소가 낮은 주소에서 높은 주소 방향으로 할당된다.
스택 영역은 높은 주소에서 낮은 주소로,
힙 영역은 낮은 주소에서 높은 주소로 가고 있다.
메모리가 할당되고 소멸되는 주기를 예측해보면,
- 개발자가 코드 작성(코드 영역 할당완료)
- 코드가 컴파일됨(스택 영역 할당완료)
- 컴파일된 코드를 실행(데이터 영역 할당완료)
- 코드가 실행되면서 지역변수, 매개변수가 선언되고, 소멸됨(힙 영역 할당->소멸 반복)
- 프로그램이 종료(힙 영역 할당완료)
이런 방식으로 동작하는 것을 유추할 수 있다.
TCPSHCOOL Mr Dimmick’s Computing Channel
댓글남기기