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