[c언어] C 언어에서의 동적 메모리 할당과 메모리 레이아웃 이해

C 언어는 동적 메모리 할당을 지원하여 프로그램 실행 중에 메모리를 할당하고 해제할 수 있습니다. 동적 메모리 할당은 프로그램이 실행되는 동안에 필요한 메모리 공간을 유연하게 확보할 수 있도록 해줍니다. 이를 통해 프로그램이 실행될 때 미리 정해진 메모리 크기에 구애받지 않고 동적으로 메모리를 관리할 수 있습니다.

메모리 할당 함수

C 언어에서는 동적 메모리 할당을 위해 malloc, calloc, realloc 등의 함수를 제공합니다. 이러한 함수들을 통해 필요한 크기의 메모리를 동적으로 할당하고 해제할 수 있습니다.

malloc

malloc 함수는 특정 크기의 메모리를 할당하기 위해 사용됩니다. 할당된 메모리는 초기화되지 않으므로 쓰레기 값이 들어있을 수 있습니다.

예시 코드:

int *ptr;
ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
    // 메모리 할당 실패 시 처리
}

calloc

calloc 함수는 특정 크기의 메모리를 할당하고 모든 비트를 0으로 초기화합니다.

예시 코드:

int *ptr;
ptr = (int *)calloc(5, sizeof(int));
if (ptr == NULL) {
    // 메모리 할당 실패 시 처리
}

realloc

realloc 함수는 이미 할당된 메모리의 크기를 변경하거나 새로운 메모리 영역을 할당받아 기존 데이터를 복사할 수 있게 합니다.

예시 코드:

int *ptr;
ptr = (int *)malloc(5 * sizeof(int));
ptr = (int *)realloc(ptr, 10 * sizeof(int));
if (ptr == NULL) {
    // 메모리 재할당 실패 시 처리
}

메모리 레이아웃

C 언어에서의 메모리 레이아웃은 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나눌 수 있습니다.

이러한 메모리 레이아웃을 이해하고 동적 메모리 할당을 올바르게 활용하면 프로그램의 효율적인 메모리 사용과 유연한 메모리 관리가 가능해집니다.