메모리의 Heap과 Stack

Jayce_97·2023년 7월 11일
0

Computer Science

목록 보기
2/7
post-thumbnail

이번 시간에는 메모리의 저장되는 영역인 Heap과 Stack에 대해서 배워보려고 합니다.


메모리

메모리란 컴퓨터 시스템에서 데이터를 저장하고 읽고 쓸 수 있는 장치를 뜻하며, 컴퓨터가 작업을 수행하는 동안 데이터를 일시적으로 저장하기 위해 사용됩니다. 메모리는 프로그램, 애플리케이션,운영 체제 등의 실행에 필요한 데이터와 명령어를 보관합니다.
메모리는 byte 단위로 구성되며, 각 byte는 고유한 주소로 식별됩니다. 이 주소를 활용하여 데이터를 읽고 쓸 수 있습니다. 메모리는 빠른 데이터 액세스를 제공하기 위해 CPU와 직접적으로 연결되어 있습니다.
주요 메모리 유형에는 주기억장치(메인 메모리 또는 RAM)와 보조 기억장치(SSD,HDD 등)으로 구성되어 있습니다. 주기억장치는 컴퓨터가 작업하는 동안 데이터에 빠르게 액세스 할 수 있도록 임시 저장소로 활용되지만, 전원이 꺼지면 저장된 데이터는 사라지게 됩니다. 반면에 보조 기억장치는 비휘발성으로, 데이터를 오래 보존할 수 있습니다.

메모리 구조

컴퓨터 시스템의 메모리는 일반적으로 여러 섹션으로 나뉩니다. 주요 섹션은 코드 섹션, 데이터 섹션, 스택, 힙으로 구성됩니다.

  • Code 섹션은 실행 가능한 프로그램의 명령어가 저장되는 영역입니다.
  • Data 섹션은 전역 변수 및 정적 변수가 저장되는 영역입니다.
  • Stack은 지역 변수, 매개 변수, 함수 호출 등을 관리하는 데 사용됩니다. 스택의 크기는 컴파일러 또는 실행 환경에서 설정되며, 함수 호출 및 복귀, 지역 변수의 할당 및 해제 등을 처리합니다.
  • Heap은 동적으로 할당된 메모리가 저장되는 영역입니다. 힙은 개발자가 메모리를 직접 관리하여 필요한 시기에 할당하고 해제할 수 있습니다.

그림출처: https://all-young.tistory.com/17

Heap(힙)

  • 힙은 동적으로 할당된 메모리를 관리하는 데 사용됩니다.
  • 힙은 사용자가 직접 메모리를 할당하고 해제할 수 있으며, 메모리를 사용할 수 있는 시점을 개발자가 결정할 수 있습니다.
  • 힙은 스택과는 달리 메모리의 다른 쪽에서 시작하여 점진적으로 확장되는 자료 구조입니다.
  • 스택보다 할당할 수 있는 메모리 공간이 많다는 것이 장점이지만 포인터로 메모리 영역을 접근해야 하기 때문에 다른 자료구조에 비해서 데이터를 읽고 쓰는게 느립니다.
  • 힙에 할당된 메모리는 개발자가 수동으로 해제해야 합니다. 그렇지 않으면 메모리 누수가 발생할 수 있습니다.
  • 런타임에 따라 크기가 결정됩니다.
    즉 힙은 동적으로 할당된 데이터를 저장하는 데 사용되며, 작성자(프로그래머,코더)에 의해 관리됩니다.

Stack(스택)

  • 스택은 프로그램에서 지역 변수, 매개 변수, 함수 호출 등을 관리하는 데 사용됩니다.
  • 메모리의 한쪽 끝에서 시작하여 다른 쪽으로 선형으로 확장되는 자료 구조입니다.
  • 스택에 데이터를 저장하고 제거하는 작업은 후입선출(LIFO, Last-In-First-Out) 방식으로 이루어집니다. 즉, 가장 최근에 추가된 데이터가 가장 먼저 제거됩니다.
  • 스택은 크기가 제한되어 있고, 자동으로 관리되므로 개발자가 메모리 할당 및 해제를 수동으로 처리할 필요가 없습니다.
  • 컴파일 타임에 따라 크기가 결정됩니다. 그렇기 때문에 깊은 재귀함수 같은 경우 Stack Overflow에러가 생기기도 합니다.
    즉 스택은 로컬 변수와 함수 호출을 저장하는 데 사용되며, 운영체제에 의해 관리됩니다.

Code Section,Text Segment(코드 섹션)

  • 코드 섹션은 프로그램의 실행 가능한 명령어들이 저장되는 영역입니다.
  • 컴파일러나 인터프리터에 의해 생성된 기계어로 된 프로그램 코드가 코드 섹션에 위치합니다.
  • 코드 섹션은 읽기 전용 메모리로, 프로그램이 실행되는 동안 변경되지 않습니다.
  • 코드 섹션은 프로그램의 흐름을 제어하고, 함수의 명령어와 점프 지점을 포함합니다.
  • 시작하고 종료될 때 까지 메모리에 계속 남아있습니다.

Data Section(데이터 섹션)

  • 데이터 섹션은 전역 변수와 정적 변수가 저장되는 영역입니다.(Ex Static 변수, 전역변수)
  • 전역 변수는 프로그램 실행 중에 생성되며, 프로그램의 다른 부분에서도 접근할 수 있습니다.
  • 정적 변수는 프로그램이 실행되기 전에 미리 할당되고 초기화됩니다.
  • 데이터 섹션은 읽기와 쓰기가 가능한 메모리로, 프로그램 실행 중에 데이터가 변경될 수 있습니다.
  • 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸합니다.

요약하면, 코드 섹션은 실행 가능한 명령어가 저장되는 영역이고, 데이터 섹션은 전역 변수와 정적 변수가 저장되는 영역입니다. 스택은 지역 변수와 함수 호출 정보를 저장하는 영역이며, 힙은 동적으로 할당된 데이터를 저장하는 영역입니다. 이들 영역은 프로그램의 실행과 데이터 관리를 위해 각각 다른 목적으로 사용됩니다.


이번 시간에는 메모리에 대해 배워 보았습니다. 종류가 여러개인 만큼 해당 내용을 익히고 있다면 에러가 났을 때의 이유를 알 수 있습니다.

profile
Dreamer

0개의 댓글