C언어 요점 정리 - 정적할당 동적할당 비교

2022. 1. 20. 19:54C언어

- 컴파일 타임이란 무엇인가? : 컴파일이 진행되는 하는 과정(시간)
 
- 런타임이란 무엇인가? : 프로세스가 작동되는 시간, 실행 중
 
- `int arr[20];` 방식과 `int *arr = malloc(sizeof(int) * 5);` 방식에서 서로에 대한 장단점을 써주세요.
 
- `int arr[20]` 장점 : 메모리 자동할당, 메모리 자동반납, 사용하기 편하다.
 
- `int arr[20]` 단점 : 메모리의 크기가 런타임이 아닌, 컴파일 타임에 미리 결정되어야 한다. 즉 유연함이 없다. 크기를 사용자가 아닌 개발자가 임의로 정해야 한다.
 
- `int *arr = malloc(sizeof(int) * 5)` 장점 : 메모리의 크기를 컴파일 타임이 아닌, 런타임에 결정할 수 있다. 즉 메모리의 크기를 사용자의 의도에 맞게 결정 할 수 있다. 그리고 메모리의 수명을 개발자가 직접 컨트롤 할 수 있다. 메모리 해제 하는 방법 : free(arr);
 
- `int *arr = malloc(sizeof(int) * 5)` 단점 : #include <stdlib.h> 를 써줘야 한다. 메모리를 수동으로 할당해야한다. 메모리를 수동으로 반환해야 한다. 만약에 이 부분에서 실수가 발생하면 메모리 누수가 일어날 수 있다.
 
- `size`가 int 변수이고 값이 `5` 일때, `int arr[size];` 가 안되는 이유는? : arr 배열의 크기는 컴파일 타임에 결정되어야 하는데, size의 값은 런타임에 결정된다.
 
 
- 동적할당이란 무엇인가? : 메모리를 힙에서 할당 받는 방식, malloc을 통해서 메모리의 크기를 자유롭게 요청가능.
 
- 정적할당이란 무엇인가? : 메모리를 스택에서 할당 받는 방식, 컴파일 타임에 미리 결정된 크기만을 받을 수 있다.
 
- 정적할당의 장점은? : 편하다.
 
- 정적할당의 단점은? : 수명조절 불가, 유연함 없다.
 
- 동적할당의 잠점은? : 수명조절 가능, 유연함이 있다.
 
- 동적할당의 단점은? : 큰 힘에는 책임이 따른다. 잘 못 사용했을 때는 메모리 누수와 같은 사고가 일어 날 수 있다.
728x90