[SW사관학교 정글/39일차 TIL]동적 메모리 할당

김승덕·2022년 10월 27일
0

SW사관학교 정글 5기

목록 보기
79/150
post-thumbnail

동적 메모리 할당(Dynamic Memory Allocation)

💡 동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당 받는 것을 말한다. 프로그램에서는 필요한 만큼의 메모리를 시스템으로부터 할당받아서 사용하고, 사용이 끝나면 시스템에 메모리를 반납한다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납해 메모리를 효율적으로 사용할 수 있는 것이다. 동적 메모리는 malloc() 계열의 라이브러리 함수를 사용하여 할당받아 사용할 수 있다.

동적 메모리는 메모리의 유연한 관리를 위해 사용한다. 마치 수납공간에 물건을 꺼내는 것과 비슷하다.

동적 메모리 할당 예시 1 : malloc 활용

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

int main(void)
{
    int *pi; // 보통 이렇게 작성 pi는 pointer integer의 약자
    pi = (int *)malloc(sizeof(int)); 
    
    // malloc은 메모리를 할당해라 라는 뜻
    // 메모리를 얼마나 할당할지는 괄호 안에 있디.
    // 그냥 4를 넣어도 되는데 보통 sizeof(int)를 한다.
    // 그 다음 그 부분의 주소를 가리키도록 한다.
    // (int *)로 형 변환을 해줌으로써 pi라는 변수가 해당 위치를 기억할 수 있도록 해줌
    // 이 부분은 외우다시피 할 정도로 많이 볼것

    printf("%d", pi); // 526411808100 -> 1004562464100 매번 할 때마다 바뀜
    
    if(pi == NULL)
    {
        printf("동적 메모리 할당에 실패\n");

        exit(1); // 프로그램 종료

    }

    *pi = 100;
    printf("%d\n", *pi);
    // 동적 메모리를 사용한 이후에는 무조건 해당 메모리를 반환함 -> 시스템 안정성을 높이기 위해
    free(pi);
    return 0;
}

동적 메모리 할당 예시 2 :알파벳 출력 프로그램(동적 메모리와 주소 응용)

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

int main(void)
{
    char *pc = NULL;
    int i = 0;
    pc = (char *)malloc(100 * sizeof(char)); 
    // 100을 곱함 -> 하나의 문자가 들어갈 공간을 100개 만든것
    // 사실상 배열과 동일
    if(pc == NULL)
    {
        printf("동적 메모리 할당에 실패");
        exit(1);
    }
    // pc가 가리키는 포인터를 1씩 증가시키며 알파벳 소문자를 삽입
    for(i = 0; i < 26; i++)
    {
        *(pc + i) = 'a' + i;
    }
    // 아스키코드 0은 NULL을 의미 즉 문자열이 종료됨을 의미
    *(pc+i) = 0;

    printf("%s\n", pc);
    free(pc);
    return 0;
}

🙋‍♂️ 오늘의 TMI

에그타르트를 받았다.🥚
잘 먹었습니당. 😋

profile
오히려 좋아 😎

0개의 댓글