메모리구조 스택 & 힙

leephoter·2022년 2월 10일
0

CPU가 프로그램을 실행할 때 RAM에서 데이터를 이진수로 가져온다. 명령어는 프로그램 카운터 (PC) 에 의해 보관된다. 다음 PC와 명령문은 IR (지침 레지스터) 에 배치된다. 그리고 PC 길이는 다음 명령문의 주소를 참조하기 위해 증가된다.

Decoding

명령을 가져와 IR에 저장하면 CPU는 명령 해독기라는 회로로 명령을 전달한다.
명령어는 CPU의 다른 부분으로 전달하여 작동을 위해 전달되는 신호로 변환된다. (decoding)

Execute

마지막 단계에서 decoding된 명령문은 완료될 CPU의 관련 부분으로 전송된다. 결과는 대부분 CPU 레지스터에 기록되면 이 레지스터는 이후 명령문에 의해 참조될 수 있다.

🔥 OS kernel 이란? 🔥

보안, 자원관리, 추상화의 기능을 하는 운영 체제의 핵심 부분으로
하드웨어와 프로세스의 보안을 책임지고,
한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 프로세스에 처리기를 할당하는 것을 스케줄링이라 한다.

🔥 static 변수란? 🔥

스태틱 변수는 선언된 함수 내에서만 사용이 가능한 변수. 다른 함수내에서 사용 불가. (지역변수와 비슷)
하지만 프로그램이 종료될 때 까지 메모리 공간에 존재. (전역변수와 비슷)
스태틱 변수는 지역변수처럼 선언된 함수 내에서만 사용이 가능하지만 그에 해당하는 값은 전역변수로 관리된다.

🔥 runtime 이란 🔥

프로그램 실행 시 존재하는 영역, 환경
(JavaScript -> Web Browser or Node.js)

⭐️ 메모리 구조 ⭐️

<RAM 메모리>
프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 load (저장) 되어야 한다. 이 때 프로그램에서 사용되는 변수들도 저장될 메모리가 필요하다.
따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다.

code

메모리의 code(코드) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 text(텍스트) 영역이라고도 칭한다.
컴파일된 후 기계어 형태로 저장되어있다.
CPU는 code 영역에 저장된 명령어를 하나씩 가져가서 처리한다.
프로그램이 시작하고 종료될 때 까지 메모리에 계속 남아있는다.
-읽기만 가능하다-

data

메모리의 data (데이터) 영역은 프로그램의 전역 (Global) 변수와 정적 (static) 변수가 저장되는 영역이다.
data 영역은 프로그램의 시작 (프로그램 언어가 컴파일 될 때) 과 함께 할당되며, 프로그램이 종료되면 소멸된다.
-읽고 쓰기가 가능하다-

BSS (Block Statred Symbol) 영역

정적으로 할당된 변수 중 프로그램의 시작 전에 0으로 초기화 시키는 것을 포함한 data 영역의 일부 영역. (BSS Section, BSS Segment ...)
OS Kernel에 의해 0으로 자동 초기화 된다.
(프로그램 내에서 변수를 초기화하지 않아도 0으로 자동 초기화 되는 이유)

Data 영역

초기화가 완료된 변수들이 저장된다.
프로그램 실행 중 접근, 수정이 가능하다.

stack

메모리의 stack (스택) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.
stack 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
stack 영역에 저장되는 함수의 호출 정보를 stack frame (스택 프레임) 이라고 한다.
함수가 호출 시 지역변수와 매개변수가 저장 (Push) 되는 영역으로 함수 호출이 완료되면 모두 Pop (제거, 인출) 된다.
stack 영역은 push (푸시) 동작으로 데이터를 저장하고, pop (팝) 동작으로 데이터를 인출한다.
이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출한다.
stack 영역은 높은 주소 쪽부터 push 된다. (낮은 주소에서 높은 주소 방향으로 할당된다)
-읽고 쓰기가 가능하다-

Heap

원시 자료형이 아닌 보다 큰 크기의 데이터를 담고자 동적으로 할당하는 메모리 공간
메모리의 heap (힙) 사용자가 관리하는 메모리 영역이다.
heap 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
heap 영역은 낮은 주소 쪽부터 할당된다 (높은 주소에서 낮은 주소쪽 방향으로 할당된다)
런타임에 결정되는 영역으로 동적인 데이터가 존재하는 영역이다.
메모리 주소 값에 의해서만 참조되고 사용된다.

profile
🔥 🧑🏾‍💻 🔥

0개의 댓글