CS

[CS] 메모리구조

usingsystem 2022. 8. 11. 17:21
728x90

프로세스의 메모리 (RAM) 구조는 다음과 같은 형태로 구성된다.

 

 

코드 영역

메모리의 코드 영역은 실행할 프로그램의 코드(명령어) 자체가 저장되는 영역이다.

텍스트 영역이라고도 불리는데, 이 영역에서 CPU는 저장된 명령어를 하나씩 가져가서 처리한다.

 

 

데이터 영역

메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다.

데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.

 

ex) 다음 변수들은 데이터 영역에 저장된다.

int global_value = 10;

void temp()
{
    static int static_value = 10;
}

 

힙 영역

메모리의 힙(heap) 영역은 운영체제에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역이다.

힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

 

ex) 힙 영역에 int 크기(4-byte) 만큼 할당된다.

void temp()
{
    // 동적할당
    int* p = new int;
}

 

 

스택 영역

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

 

ex) 다음 코드를 통해 스택 영역에 어떻게 메모리가 잡히는지 보자. 

void function(int a, int b)
{
    string c;
}

int main()
{
    int a = 10;
    float b = 10.0f;
    string c = "10";

    function(0, 0);

    return 0;
}

 

스택 프레임

------------------------main-----------------------

지역 변수 영역

int a (4-byte)

float b (4-byte)

string c (n-byte)

 

반환 영역

next

return addr

return 0 (4-byte)

 

매개변수 영역

x

-----------------------function----------------------

지역 변수 영역

string c (n-byte)

 

반환 영역

next

return addr

 

매개변수 영역

int a (4-byte)

int b (4-byte)

------------------------------------------------------

 

 

 

실제 환경

실제 운영체제 위에서는 여러 프로세스들이 동작하기 때문에 다음과 같이 구성될 것이다.

운영체제는 프로세스 단위로 RAM으로부터 메모리를 구분하여 할당하고, 프로세스들 내부에서는 다시 각각 코드영역, 데이터영역, 힙 영역, 스택 영역으로 분리된다.

 

 

 

 

 

참고

www.cs.colostate.edu/~fsieker/misc/runtimeStack/runtimeStack.html

 

Understanding the LC3 Runtime Stack

On completion of the function, the work of building the runtime stack must be undone. Again, it is a cooperative effort split between the called and calling functions. The work is done in the opposite order to the building of the stack. The called function

www.cs.colostate.edu

 

728x90

'CS' 카테고리의 다른 글

[CS] 컴파일(Compile)이란?  (0) 2022.08.19
[CS] 프로그래밍 언어와 빌드 과정 [Build Process]  (0) 2022.08.19
[CS] 스택(Stack)과 힙(Heap) 차이  (0) 2022.08.10