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


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

  • 2016년 01월 07일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

조회수 307


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해 줄 때 까지는 계속 사용할 수 있습니다.

  • 2016년 01월 07일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close