본문 바로가기

개발(합니다)/컴퓨터 일반&CS

정적 메모리, 자동 메모리, 자유 저장소

반응형

코드(텍스트) 영역

- 작성 한 코드가 저장 되는 영역

- 프로그램이 끝날 때까지 메모리에 적재

- 상수도 포함

- 컴파일 되어 기계어가 들어감


데이터 영역(정적 메모리)

- 프로그램이 실행에 필요한 변수가 초기화 되는 영역

- 프로그램이 끝날 때까지 메모리에 적재

- 함수 내 정적 변수는 프로그램 실행 시 할당되고 함수 호출 시 초기화

- 전역 변수, 정적 변수



스택 영역(자동 메모리)

- 프로그램이 사용하는 임시 저장 되는 영역

- 함수 호출 시 생성되고, 함수 종료시 반환

- 컴파일 시 크기가 결정

- 스택 자료구조에게 기인

- 지역 변수, 매개변수, 반환값 저장

- 스택 영역이 넘어가면 스택 오버플로우 발생


힙 영역(자유 저장소)

- 프로그래머가 할당/해제 하는 영역

- malloc()이나 new 연산자로 할당

- free()나 delete 연산자로 해제

- java는 가비지 컬렉터가 자동으로 관리

- 동적 할당이라고 부름

- 런타임 시에 크기가 결정

- 힙 영역이 넘어가면 힙 오버 플로우 발생


힙과 스택

스택 영역이 크면 힙 영역이 작아지고 힙 영역이 커지면 스택 영역이 커짐



힙 영역을 활용한 동적 할당


int a= 1;

int* test(int a) {

int *b = 1;

b = a + 1;

return &b;

}

라는 함수가 있습니다.

함수는 스택 영역으로 괄호"{ }" 가 끝나면 메모리를 반환합니다.

b라는 주소에 저장 되어 있던 값은 반환으로 인해 더이상 존재 하지 않는 값이 되어버립니다.


그래서 프로그래머가 직접 반환할 시점을 정하기 위해 힙 영역에 메모를 할당하고 필요 할 때 해제합니다.






반응형