[CS] 동적 메모리 할당

Binsu·2021년 9월 10일
0

Computer Science

목록 보기
9/10

동적 메모리 할당

왜 쓰는가?
C 프로그램에서 저수준의 mmapmunmap 함수를 사용해서 생성하고 삭제할 수 있지만, 추가적인 가상 메모리를 런타임에 획득할 필요가 있을 때, 동적 메모리 할당기를 사용하는 것을 좀 더 편리하고 호환성이 좋다.

동적 메모리 할당기(dynamic memory allocator)는 아래 그림과 같이 힙(heap)이라고 하는 프로세스의 가상메모리 영역을 관리한다.

시스템마다 다르지만, 일반적으로 힙이 미초기화된(uninitialized) 데이터 영역 직후에 시작해서 위쪽(높은 주소 방향)으로 커지는 무요구(demand-zero) 메모리 영역이라고 가정한다. 각각의 프로세스에 대해서, 커널은 힙의 꼭대기를 가리키는 변수 brk(break)를 사용한다.

  • 명시적(explicit) 할당기 : malloc(), free()

  • 묵시적(implicit) 할당기 : garbage collector(Java, List, ML 등 하위수준 언어)

malloc과 free 함수

malloc 예제

#include <stdio.h>
#include <stdlib.h>

void foo(int n)
{
    int i, *p;
    /* Allocate a block of n ints */
    p = (int *)malloc(n * sizeof(int));

    if (p == NULL)
    {
        perror("malloc");
        exit(0);
    }

    /* Initialize allocated block */
    for (i = 0; i < n; i++)
        p[i] = i;
    /* Return allocated block to the heap */
    free(p);
}

int main()
{
    foo(5);
}


위 그림과 같이 malloc()은 가상 메모리에 값을 할당하고, free()는 할당된 값을 가상 메모리에서 반환하는 것을 알 수 있다.

0개의 댓글