어제의 나보다 성장한 오늘의 나

[운영체제] Process Address Space 프로세스 메모리 구조 본문

CS/운영체제

[운영체제] Process Address Space 프로세스 메모리 구조

NineOne 2021. 5. 24. 23:33

프로그램은 파일 시스템에 있다. 그 프로그램이 메모리로 올라가서 메모리를 차지하고 있는 상태에서 실행되어야 한다.

메모리 주소에 저장된 프로세스 형태는 다음과 같다.

code segment와 data segment

code segment와 data segment은 실행파일에 들어가 있다. 즉! C나 C++로 프로그래밍한 것이 컴파일되면 기계어 코드로 작성이 되고, 이 코드가 이 부분에 올라가게 된다.

data 영역에는 전역변수나 static data들은 프로그램이 실행이 될 때 항상 메모리 공간을 가지고 있어야 한다. 그래야지 function이 아무데서나 다 접근할 수 있고 static 변수 같은 경우에는 function에 갔다 다시 들어와도 옛날의 값을 유지할 수 있다.

코드 영역은 코드가 저장되고, 데이터 영역은 전역변수 or 스태틱 변수, 이 2개의 영역은 실행파일에 존재한다.

Heap & Stack

heap과 stack 부분은 프로그램을 실행하면서 생겨졌다 없어졌다 하면서 메모리를 사용을 한다.

이때 heap은 동적 할당(dynamic memory allocation)에 의해서 생기는 공간인데 C++ 같은 경우는 new 키워드를 사용해서 메모리를 할당하고 delete로 해제한다.

stack은 push되고 pop 되면서 저장공간이 늘어나고 줄어든다. 대표적인 예로 함수를 호출할 때 Stack에 매개변수로 데이터가 push 된다.

지역변수 또한 Stack의 영향이다. 어떤 함수 안에 어떤 변수를 선언하면 그 함수를 수행할 동안 잠시 저장공간이 생겼다가 함수가 끝나고 나면 없어지고 한다.

힙은 프로세스가 돌아가는 런타임에 크기를 알려줌으로써 영역을 확보하는 공간, 스택은 컴파일 타임에 지역변수나 매개변수가 차지하는 공간

 

 

출처

Comments