메모리 공간
Code 영역 | 실행할 프로그램의 명령코드 저장 공간 |
Data 영역 | 전역변수 저장 공간 |
Heap 영역 | 동적할당 저장 공간 |
Stack 영역 | 지역, 매개 변수 저장 공간 |
메모리 할당
- 정적 할당
- 컴파일 시 할당될 메모리 크기가 결정
- Stack, Data 영역에 변수로 할당되는 메모리
- 동적 할당
- 실행 중 메모리 할당
- 동적할당 메모리는 Heap영역에 할당
Heap 영역의 특징
- Heap 영역은 자료형의 개념이 없음. byte단위로 정보를 처리한다.
- Heap 영역은 일반적인 Stack과 Data영역보다 넓은 메모리 영역을 가진다.
- 할당된 메모리의 시작주소를 malloc함수를 호출한 지역으로 반환한다.
- 시작주소만 반환 되기 때문에 Stack영역에서 사용하려면 해당 자료형 주소로 형변환 해야한다.
- Heap영역에 할당된 메모리는 자동으로 해제되지 않는다.
malloc 함수
- Heap 영역에 동적으로 공간을 할당 해주는 함수
- 필요 헤더 : <stdlib.h>
- (void*)malloc(size)
※ 할당 하고싶은 자료형을 byte 단위로 인자값을 보낸 후 할당된 메모리의 시작주소를 해당 자료형으로 형변환 후 사용.
※ 할당에 성공하면 해당 주소값을 반환하고, 실패하면 NULL을 반환한다.
※ int* a = (int*)malloc(sizeof(int));
free 함수
- Heap영역에 할당된 공간을 해제하는 함수
- 필요 헤더 : <stdlib.h>
- free(void*)
※ Heap 영역에 할당된 메모리는 자동으로 해제되지 않는다.
※ 해제를 한다고 해당 포인터 변수의 값이 없어지는것이 아니다. (메모리 사용 권한만 취득, 반납하는 개념)
※ 해제를 한 후 해당 포인터 변수는 NULL로 밀어준다.
※ free(ptr);
ptr = NULL;
'Stack > C' 카테고리의 다른 글
C 중간 활용 : 학생 관리 시스템 만들기 (0) | 2021.08.24 |
---|---|
C 파일 입출력 (0) | 2021.08.24 |
C 구조체, 구조체 포인터 (0) | 2021.08.22 |
C 포인터, 배열 (0) | 2021.08.22 |