C프로그램이 실행되면, 두 가지 유형의 메모리 공간이 할당된다. 첫 번째는 stack, 두번째는 heap이다.
스택영역 메모리의 할당과 반환은 컴파일러에 의해 알아서 수행된다. 그래서 자동 메모리라고도 불린다고 하네용.
힙 영역의 메모리의 할당과 반환은 프로그래머에 의해 처리된다.
void func(){
int * x = (int *) malloc (sizeof(int));
}
자 이 코드에서는 지금 스택과 힙 할당이 모두 발생한다. 일단 int * x <- 컴파일러가 스택에 공간을 할당한다. malloc <- 4byte크기의 공간을 heap으로 부터 요구한다. 그리고 힙의 주소를 반환한다. 이 주소는 스택에 저장된다! x에 저장!!
신기하다 ^^
malloc, free 등은 시스템 콜이 아니다. 라이브러리 함수이다.
brk 는 시스템 콜이다. 프로그램의 break 위치를 변경하는데 사용된다. break란 힙의 마지막 위치를 나타낸다.
break가 현재 break보다 큰지 작은지에 따라 힙의 크기를 증가시키거나 감소시킨다.