반응형
코드(텍스트) 영역
- 작성 한 코드가 저장 되는 영역
- 프로그램이 끝날 때까지 메모리에 적재
- 상수도 포함
- 컴파일 되어 기계어가 들어감
데이터 영역(정적 메모리)
- 프로그램이 실행에 필요한 변수가 초기화 되는 영역
- 프로그램이 끝날 때까지 메모리에 적재
- 함수 내 정적 변수는 프로그램 실행 시 할당되고 함수 호출 시 초기화
- 전역 변수, 정적 변수
스택 영역(자동 메모리)
- 프로그램이 사용하는 임시 저장 되는 영역
- 함수 호출 시 생성되고, 함수 종료시 반환
- 컴파일 시 크기가 결정
- 스택 자료구조에게 기인
- 지역 변수, 매개변수, 반환값 저장
- 스택 영역이 넘어가면 스택 오버플로우 발생
힙 영역(자유 저장소)
- 프로그래머가 할당/해제 하는 영역
- malloc()이나 new 연산자로 할당
- free()나 delete 연산자로 해제
- java는 가비지 컬렉터가 자동으로 관리
- 동적 할당이라고 부름
- 런타임 시에 크기가 결정
- 힙 영역이 넘어가면 힙 오버 플로우 발생
힙과 스택
스택 영역이 크면 힙 영역이 작아지고 힙 영역이 커지면 스택 영역이 커짐
힙 영역을 활용한 동적 할당
int a= 1;
int* test(int a) {
int *b = 1;
b = a + 1;
return &b;
}
라는 함수가 있습니다.
함수는 스택 영역으로 괄호"{ }" 가 끝나면 메모리를 반환합니다.
b라는 주소에 저장 되어 있던 값은 반환으로 인해 더이상 존재 하지 않는 값이 되어버립니다.
그래서 프로그래머가 직접 반환할 시점을 정하기 위해 힙 영역에 메모를 할당하고 필요 할 때 해제합니다.
반응형
'개발(합니다) > 컴퓨터 일반&CS' 카테고리의 다른 글
[자료구조]더블 링크드 리스트(Doubly Linked List) (0) | 2018.12.30 |
---|---|
[자료구조]싱글 링크드 리스트(Linked List) (0) | 2018.12.30 |
함수와 메소드의 차이 (0) | 2018.12.14 |
점근적 분석과 표기법 : 시간 복잡도와 공간 복잡도 (0) | 2018.12.13 |
알고리즘이란 (0) | 2018.12.13 |