[malloc] 동적 메모리 할당

zeo·2021년 9월 10일
1

동적 메모리 개념

개요

  • 예상치 못하게, 사용자가 필요한 만큼의 메모리를 프로그램 작동 도중(runtime)에 할당받고자 할 때, 동적 메모리 할당 진행
  • 동적 메모리 할당기는 필요한 메모리를 수용할 수 있는 최소한의 크기를 가진 블록을 할당받아 heap이라는 가상메모리 영역을 관리
  • 시스템 효율 및 메모리 활용을 극대화하기 위해 사용

명시적 할당기(malloc package)

  • 할당기는 메모리 할당과 반환을 모두 수행해야 하는 명시적 할당기와 메모리 할당만 수행하는 묵시적 할당기로 구분
  • C 표준 라이브러리는 malloc 패키지를 통해 명시적 할당기를 제공

1. void *malloc(size_t size)

  • 데이터를 적정하게 수용할 수 있는 메모리를 할당해주어야 하므로,
    "(data_type) malloc (sizeof (data_type) * 할당크기) " 방식을 통해 할당
  • 메모리 할당 성공시 최소한의 size byte로 할당된 메모리 블록의 포인터를 반환
  • 실패시, NULL을 반환하고 errno로 오류처리 진행 (ex. errno = 0)

2. void free(void *p)

  • 아무것도 반환하지 않음
  • 동적한 메모리를 해제하기 위해 사용
  • 단, 이전에 malloc 함수 호출에 의해 할당된 메모리에 한해서만 사용 가능

3. 추가 기능

1) calloc : 할당된 블록을 0으로 초기화해주는 malloc version
2) realloc : 기존에 할당받은 블록의 사이즈 변경 가능
3) sbrk : 힙 내부에서 블록의 크기를 확대 또는 감소 가능

<동적 할당시 유의 사항>

1. application

  • malloc 과 free 요청에 의한 임의의 배열은 잠재적 issue 발생 여지가 있음
  • free 요청 대상은 반드시, malloc에 의해 할당된 블록이어야 함

2. allocator(할당기)

  • 할당된 블록의 개수나 사이즈를 조절할 수 없음
  • malloc 요청에 즉시 응답해야 함
  • 반드시 free memory 영역에 블록 할당할 것
  • 모든 요구사항을 충족하는 블록을 할당할 것
  • malloc에 의해 할당된 블록은 이동할 수 없음

0개의 댓글