sw 사관학교 정글/TIL & WIL

[2022.05.05 ]TIL - 동적메모리 할당, 메모리 구조

donggyu 2022. 5. 11. 21:54
반응형

동적 메모리 할당 (= 메모리 동적 할당)

컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것이다.

사용이 끝나면 운영체제가 쓸 수 있도록 반납하고 다음에 요구가 오면 재할당을 받을 수 있다.

데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임에 미리 결정

힙 영역의 크기는 프로그램이 실행되는 도중인 런 타임에 사용자가 직접 결정

런 타임에 메모리 할당받는 것 → 동적 할당

 

메모리 구조

프로그램이 운영체제로 부터 할당받는 대표적인 메모리 공간

  1. 코드(code) 영역
  2. 데이터(data) 영역
  3. 스택(stack) 영역
  4. 힙(heap) 영역

코드 영역 (코드 정적 세그먼트)

실행할 프로그램의 코드(명령어)가 저장되는 주기억장치 영역, cpu는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리

데이터 영역 (데이터 정적 세그먼트)

문자열리터럴(문자열 상수),전역 변수, 정적(static) 변수가 저장되는 영역

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

 

스택 영역 (데이터 동적 세그먼트)

함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역

push 동작으로 데이터를 저장, pop동작으로 데이터를 인출

데이터를 관리하는데 필요한 연산, 일반적으로 삽입, 삭제, 변경의 갱신과 정렬, 검색을 수행할 때 필요한 데이터들을 관리하는 영역

메모리의 높은주소에서 낮은 주소 방향으로 할당

*스택프레임: 스택영역에 저장되는 함수의 호출 정보

 

힙 영역 (데이터 동적 세그먼트)

프로그램의 실행 중에 원시 코드에 의해 동적으로 할당되고 할당 해제되는 데이터 세그먼트 영역

사용자가 직접관리해야하는 메모리 영역

사용자에 의해 메모리 공간이 동적으로 할당되고 하제

메모리의 낮은 주소에서 높은 주소의 방향으로 할당

 

메모리 할당 방법

C프로그램은 운영체제에서 주기억장치 사용에 대한 허가를 받아야 하고, 사용이 끝난 경우에는 바로 반환을 해야한다. 이때 주기억장치에 사용 허가를 받는 작업을 할당(allocation), 사용이 끝나고 반환하는 작업을 할당 해제(deallocation)라고 한다.

 

정적할당

일반적으로 프로그램이 실행될 때 기억장소에 할당되고 프로그램이 끝날 때 할당 해제될 때 까지 유지되어지는 기억장치 관리방식

 

동적할당

프로그램 실행 중에 필요할 때 마다 기억장소를 할당하고, 필요하지 않으면 할당 해제를 시스템 또는 원시코드로 제어하는 기억장소 관리방식

 

스택에 의한 동적 할당

기억장소 운영의 효율성을 위해서 함수가 실행될 때마다 시스템에 의해서 필요한 기억 장소가 할당되고 함수의 실행이 끝날 때 항당이 해제되는 방식

 

힙을 이용한 동적 할당

라이브로리 내장함수로 제공되는 할당(calloc, malloc), 할당해제(realloc, free) 함수를 이용하여 프로그래머가 주소에 의한 접근으로 기억장소를 관리하는 방식

 

두가지 유형의 동적 메모리 할당

 

명시적 할당기

  • 명시적 할당기는 응용이 명시적으로 할당된 블록을 반환해줄 것을 요구
  • C 표준 라이브러리는 malloc 패키지를 제공
  • C 프로그램은 malloc 함수를 호줄해서 블록을 할당, free 함수를 호출해서 블록 반환

묵시적 할당기

  • 언제 할당된 블록이 더 이상 프로그램에 의해 사용되지 않고 블록을 반환하는지를 할당기가 검출할 수 있을 것을 요구
  • 묵시적 할당기는 가비지 컬렉터(garbage collector)라고 알려져 있으며, 자동으로 사용하지 않은 할당된 블록을 반환시켜주는 작업을 가비지 컬렉션이라고 부름
  • List, ML, 자바 같은 상위 수준 언어들이 가비지 컬렉션 사용
반응형