반응형

메모리 공간

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

+ Recent posts