[CS]프로세스 메모리

한상욱·2024년 7월 21일
0

CS&자격증후기&잡담

목록 보기
9/22
post-thumbnail

들어가며

우리가 작성한 코드들은 실제로 어떻게 컴퓨터가 처리하게 될까요? 언어마다 다른 이론이 복합적으로 적용되겠지만, 가장 기본적인 프로세스 메모리 구조에 대한 정리를 해보겠습니다.

프로세스 메모리

우리가 사용하고 있는 PC는 각각 OS를 통해서 프로세스를 처리하게 됩니다. 예를 들어 아래의 코드를 예로 들어보죠.

printf("Hello!"\n);

이러한 코드를 수행하기 위해서는 각 코드를 메모리에 할당하고 CPU가 처리하게 됩니다. 그러면 변수나 여러가지 서브 루틴이 있는 경우도 함께 보도록 하죠.

int funcA() {
	var b = 1;
}

void main() {
	int a = 0;
    int b = funcA();
}

이렇게 변수도 함께 존재하는 경우도 있겠죠. 이러한 경우를 모두 처리하는 과정을 이해하려면 프로세스 메모리 구조를 알 필요가 있습니다. 프로세스 메모리는 코드, 변수 등을 각각 알맞은 영역에 값을 지정하고 관리하고 수행하게 됩니다. 이를 수행하는 주체는 CPU입니다. 그리고 여러가지 영역이 있지만 크게 코드, 스택, 힙 영역을 알아보겠습니다.

코드 영역

코드 영역은 실제 코드를 저장하고 있는 메모리 영역입니다. 이 코드는 코드 영역에 저장되어 있다가 CPU의 PC가 코드의 주소를 가르키게 되면 실행하게 됩니다.

스택 영역

스택 영역은 코드가 실행되면서 선언된 지역, 매개 변수를 저장하는 메모리 영역입니다. LIFO의 특징을 가지며 높은 주소지부터 낮은 주소지 순으로 변수값들을 저장하게 되는 것이죠. 그리고 해당 함수 루틴이 종료되면 모든 데이터를 스택영역에서 삭제하게 됩니다. 근데, 해당 변수들의 값은 어떻게 알 수 있을까요? 그 값은 힙 영역을 통해 알 수 있습니다.

힙 영역

힙 영역을 프로그램에서 사용하는 변수 등의 메모리 용량을 지정하고 값을 저장하고 관리하는 메모리입니다. 스택영역과는 반대로 값을 낮은 주소지부터 저장하게 되며 스택 영역은 포인터 변수를 통해 힙 영역에서 변수의 값을 가져올 수 있습니다. 중요한 점은 스택 영역과 힙 영역은 서로 반대 방향에서 값을 저장하게 되므로 서로 저장영역이 겹쳐질 수 있습니다.

결론

따라서, 개발자라면 어떻게 프로그램이 실행되는지 혹은 변수나 메모리가 관리되는지 이해하여 메모리 낭비를 방지할 수 있어야겠네요!!

profile
자기주도적, 지속 성장하는 모바일앱 개발자가 되기 위해

0개의 댓글