동적 메모리 할당

ORCASUIT·2023년 11월 6일
0

동적 메모리 할당(dynamic memory allocation)은 프로그램 실행 중에, 즉 런타임에 메모리를 할당하는 과정을 말합니다. 이를 통해 프로그램은 필요한 만큼의 메모리를 요청하고, 사용이 끝나면 운영 체제에 반환할 수 있습니다. C언어와 같은 저수준 언어에서는 개발자가 직접 메모리를 관리해야 하므로, 동적 메모리 할당은 중요한 개념입니다.

C언어에서의 동적 메모리 할당 함수들

  • malloc: 지정된 크기의 메모리 블록을 할당합니다. 할당된 메모리는 초기화되지 않습니다.
    int *ptr = (int*)malloc(sizeof(int) * n); // n개의 정수 크기만큼 메모리 할당
  • calloc: malloc과 비슷하지만, 할당된 메모리를 0으로 초기화합니다.
    int *ptr = (int*)calloc(n, sizeof(int)); // n개의 정수를 저장할 수 있는 메모리 할당 및 0으로 초기화
  • realloc: 이미 할당된 메모리 블록의 크기를 변경합니다.
    ptr = (int*)realloc(ptr, sizeof(int) * n); // ptr의 메모리 크기를 n개의 정수 크기만큼 조정
  • free: 할당된 메모리를 해제하고 운영 체제에 반환합니다.
    free(ptr); // 할당한 메모리 해제

동적 메모리 할당의 주의점

  • 메모리 누수: 할당된 메모리를 해제하지 않으면, 메모리 누수가 발생할 수 있습니다. 이는 프로그램이 더 이상 사용하지 않는 메모리를 계속 점유하게 되는 것을 말합니다.
  • 포인터 오류: 잘못된 포인터를 사용하거나, 해제된 메모리를 다시 사용하려는 경우 프로그램이 비정상적으로 동작할 수 있습니다.
  • 할당 실패 처리: malloc이나 calloc 함수는 메모리 할당에 실패하면 NULL 포인터를 반환합니다. 프로그램은 이를 적절히 처리해야 합니다.
  • 오버헤드: 동적 할당은 스택 할당에 비해 오버헤드가 큽니다. 할당과 해제 과정에서 추가적인 시간이 소요될 수 있습니다.

파이썬에서의 동적 메모리 할당

파이썬과 같은 높은 수준의 언어에서는 개발자가 직접 메모리를 할당하고 해제할 필요가 없습니다. 파이썬은 자동으로 메모리를 관리하는 가비지 컬렉터를 내장하고 있어, 개발자는 객체를 생성하고 사용하면 됩니다. 그러나 내부적으로는 파이썬도 필요에 따라 동적으로 메모리를 할당하고 해제하는 과정이 일어나고 있습니다.

동적 메모리와 관련된 좋은 프로그래밍 습관

  • 할당한 메모리는 반드시 필요 없어진 직후에 free를 호출하여 해제해야 합니다.
  • 메모리를 할당할 때마다 해당 메모리가 성공적으로 할당되었는지 확인해야 합니다.
  • 메모리를 할당한 포인터를 다른 변수에 복사할 때는 메모리 누수에 주의해야 합니다.
  • 동적 메모리 할당은 꼭 필요한 경우에만 사용하고, 가능하다면 스택을 사용하는 것이 좋습니다.

0개의 댓글