C에서 스택 할당과 힙 할당이 뭔가요?

메모리 할당을 받을 때, 스택할당이라는게 있고 힙 할당이라는게 있다는데 뭐가 다른가요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    프로그램이 시작되면 스택영역에 메모리를 할당 받습니다. 변수를 선언하거나 하면 이 스택영역 메모리를 사용하져. 스택영역 메모리는 컴파일 될 때 얼마나 사용하게 될 지 정해지고, 스택영역 메모리에는 아주 빠른 속도로 접근할 수 있습니다. 너무 큰 배열을 사용해 버리면 스택영역 메모리를 다 써버릴 수 있으므로 주의해야 합니다.

    void a()
    {
        if(true) {
            int x = 0;
        }
        x = 1;
    }
    

    이 예에서 x가 스택영역 메모리를 사용하는 변수입니다.

    반면 힙영역 메모리는 실행중에 동적으로 메모리를 할당받는 경우에 사용합니다. 힙영역 메모리는 읽어올 수 있는 속도가 조금 느린 대신에 큰 메모리를 할당받을 수 있습니다. 그리고 free되기 전에는 메모리 영역에 계속 남아있기 때문에 할당받은 블록 밖에서도 사용이 가능합니다.

    int *x;
    void b()
    {
        if(true) {
            x = malloc(sizeof(int));
        }
        *x = 1;
    }
    
    void c()
    {
        free(x);
    }
    

    이렇게 malloc으로 메모리를 할당받으면 힙영역에서 받는거고, b에 할당받은 메모리는 c에서도 free해 줄 때 까지는 계속 사용할 수 있습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.