Fundamental of Software Develop/: : Linux System Programming

동적 메모리 할당

Jay.P Morgan 2023. 11. 9. 23:46

프로그램 실행 중에 메모리 용량을 할당하고, 더이상 사용하지 않으면 해당 공간을 해제하는 것이 동적 메모리 할당이다.

(JAVA, Kotlin 등 상위레벨 언어는 Garbage Collector가 사용하지 않는 메모리를 알아서 해제하여 Managed Language라 부른다.)

 

  malloc()

  malloc() 함수(memory allocate 함수)는 인자로 지정한  크기의 메모리를 할당하면 해당 메모리 시작주소를, 실패하면 NULL포인터를 반환한다.

  ※ malloc() 함수는 할당된 메모리를 초기화하지 않는다는 점 주의하자

#include <stdlib.h>

void *malloc(size_t size);

    size : 할당 할 메모리 크기

char *ptr;
ptr = malloc(sizeof(char) * 100);

    malloc() 함수를 이용해 문자 100개의 메모리 공간을 할당하는 예

 

 

  calloc()

  calloc() 함수는 [배열 요소의 수] X [각 배열의 단위사이즈] 로 메모리 용량을 할당한다. calloc() 함수는 할당된 메모리를 0으로 초기화한다.

#include <stdlib.h>

void *calloc(size_t nmemb, size_t size);

    nmemb : 배열 요소의 수, size : 배열 요소단위의 크기(byte)

char *ptr;
ptr = calloc(10, 20);

 

 

  realloc()

  realloc() 함수는 이미 할당한 메모리에 용량을 추가하여 할당할 때 사용한다. 기존에 할당한 메모리와 추가할 메모리를 더한 크기의 메모리를 새롭게 할당하여 주소를 반환한다. 이 때, 기존 메모리의 내용을 새로 할당된 메모리로 복사한다.

#include <stdlib.h>

void *realloc(void *ptr, size_t size)

  ptr : 기존 메모리 주소 포인터, size : 할당할 메모리 크기

 

char *ptr, *new;
ptr = malloc(sizeof(char) * 100);
new = realloc(ptr, 100);

   realloc() 함수를 이용해 문자 100개의 메모리 공간을 할당하는 예

 

 

  메모리 해제 : free()

#include <stdlib.h>

void free(void *ptr);