[C++] 메모리 구조 - Code, Data, Stack, Heap

    프로그램 실행 시 운영체제는 메모리 공간을 할당해주는데 이 구조는 크게 네 가지로 나뉜다

     

    코드 영역 (Code Area)

    데이터 영역 (Data Area)

    힙 영역 (Heap Area)

    스택 영역 (Stack Area)

    Code

    실행될 프로그램의 코드가 기계어로 저장되는 영역

    CPU는 코드 영역에 저장된 명령문들을 하나씩 가져가 실행한다

     

    Data

    전역 변수, static 변수들이 저장되는 영역

    프로그램 시작 시 할당되고 프로그램 종료 시 소멸된다

    데이터 영역 크기는 컴파일 때 결정된다

     

    Stack

    지역 변수, 매개변수가 저장되는 영역

    함수 호출 시 할당되고 함수 호출 완료 시 소멸된다

    스택 영역 크기는 컴파일 때 결정된다

     

    Stack Frame

    함수가 호출되면 함수의 매개변수, 호출이 끝나면 돌아갈 반환 주소값, 지역 변수 등을 스택 영역에 저장하게 되는데 이를 스택 프레임(stack frame)이라고 한다

    스택은 후입선출(LIFO, Last In First-Out) 방식으로 push로 데이터를 저장, pop으로 데이터를 인출한다

     

    Stack Overflow

    스택 영역은 약 1MB로 공간이 크지 않기 때문에 재귀 함수가 깊게 호출되거나 지역 변수를 많이 포함하고 있을 경우 스택 영역을 넘어 에러를 발생한다

     

    Heap

    동적으로 할당된 메모리가 저장되는 영역

    사용자가 직접 메모리를 할당하고 해제하여 관리할 수 있는 영역

    힙 영역 크기는 런타임 때 결정된다

    댓글