Information Technology

시스템 메모리 구조 코드/데이터/스택/힙 영역 정리

coinAA 2021. 11. 10. 16:24

 

목차

     

    시스템 메모리의 구조

    프로그램을 동작시키면 프로그램이 동작하기 위한 메모리 공간에 생성되는데 이 메모리 공간은 대표적으로 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로스택 영역과 힙 영역이 있다.

    메모리 구조

     

    코드(Code) 영역

    프로세스가 실행할 코드와 매크로 상수가 기계어의 형태로 실행할 프로그램의 코드가 저장된 공간이다. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only로 지정 돼 있고 텍스트(code) 영역이라고도 부른다.

     

    데이터(Data) 영역

    메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이며 전역변수/static 값을 참조한 코드는 컴파일 하고 나면 Data 영역의 주소값을 가르키도록 바뀐다. 실행 중도에 전역변수가 변경 될 수도 있으니 이 영역은 Read-Write로 지정돼있다.

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

     

    스택(Stack) 영역

    프로세스의 메모리 공각을 관리하기 위한 알고리즘 중 하나이며, 프로그램 로직이 동작하기 위한 인자(Argument)와 프로세스 상태를 저장하는데 사용되며, 레지스터의 임시 저장, 서브루틴 사용 시 복귀 주소(Return address) 저장, 서브루틴에 인자 전달 등 여러값을 저장하는데 사용된다. 저장한 값이 호출 완료되면 사라진다.
    스택은 메모리의 상위 주소에서 하위 주소 방향 으로 사용하며, 후입선출(Last In First Out, LIFO) 원칙에 따라 나중에 저장된 값을 먼저 사용한다.

     

    힙(Heap) 영역

    프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는데 사용하며, 프로그램이 실행될 때까지 알 수 없는 가변적인 양의 데이터를 저장하기 위해 프로그램 프로세스가 사용할 수 있도록 미리 예약된 메인 메모리 영역이다. 주로 프로그래머가 필요할 때마다 사용하곤 한다.
    힙 영역은 프로그램에 의해 할당되었다가 회수되는 작용을 되풀이하고 기억 장소는 포인터 변수를 통해 동적으로 할당 받고 돌려주며, 연결 목록이나 나무, 그래프 등의 동적인 데이터 구조를 만드는 데 반드시 필요하다.
    프로그램 실행 중에 해당 힙 영역이 없어지면 메모리 부족으로 비정상 종료된다.