끄적끄적 코딩

정적 메모리 할당

int arr[100];

위와 같이 메모리를 정적으로 할당할 수 있습니다.

처음 프로그램을 만들었을 때 100칸의 배열로 유저들을 수용하려고 했습니다.
근데 100명이상의 유저들이 들어온다면 프로그램을 수정해서 200으로 변경해서 해결할 수도 있습니다.
하지만 또 300명 400명으로 된다면 매번 변경해야하며,
변경하는것이 번거로워서 1000, 10000으로 공간을 많이 만들어 놓을 수도 있습니다.
이때 200명의 사람들만 이용중이라면 공간(메모리)가 낭비될 수 있습니다.

이럴 때 동적으로 메모리를 할당할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
int main() {
  int size;
  scanf("%d", &size);
  int *arr=malloc(sizeof(int)*size);
 
  for (int i = 0; i < size; ++i){
    scanf("%d", &arr[i]);
  }
 
  for (int i = 0; i < size; ++i){
    printf("arr[%d]=%d\n", i, arr[i]);
  }
  free(arr);
}


malloc 함수를 사용해서 포인터 arr에 size만큼의 크기를 동적으로 할당해주었습니다.

void *malloc(size_t size)

메모리를 할당한 후에 해제하지 않으면 메모리가 누출됩니다.

메모리를 쓰지 않게 된 경우 free 함수를 사용해서 메모리를 해제해줍니다.

void free(void *ptr)

 

malloc외에도 calloc, realloc 함수가 존재합니다.

calloc은 malloc과 동일한데 해당 메모리를 0으로 초기화 합니다.

void *calloc(size_t n, size_t size)


realloc 함수는 이미 할당되어 있는 메모리를 다시 할당할 때 사용합니다.

void *realloc(void *memblock, size_t size)
arr = realloc(arr, sizeof(int)*newSize);

 

검색 태그