동적할당 은 #include <stdlib.h>
malloc로 사용.
* 메모리 할당 malloc = 메모리 얼로케이트
ㄴ수동 할당
ㄴ수동 반납(필수적으로 해야함, 그렇지 않으면 메모리 누수라고 함.)
- 수동으로 해지할 때까지 사라지지 않는다.
- 수동으로 해지하는 코드는 free(); // ex) free(arr);
장점 및 특징
- 세밀한 조절이 가능하다.
- 메모리(malloc)는 스택(윗 공간)에 쌓임.
- c언어에서 적용.
// 문제 : 공간도 만들고 값도 세팅해 주는 함수 구현
// 조건 : int 값 3개 저장할 수 있는 공간만드는 일도 change가 하도록 해주세요.
// 조건 : main 함수에서는 `int arr[3];`를 할 수 없습니다.
#include <stdio.h>
#include <stdlib.h> // malloc 함수를 사용하기 위해선 이걸 써야 합니다.
#pragma warning (disable: 4996)
int* change() {
int input;
scanf("%d", &input);
// malloc => 운영체제에게 Heap 메모리 지역에서 공간을 할당해 달라고 부탁
// malloc의 리턴 값 => 우리가 할당받은 땅의 첫번째 주소
int* arr = malloc(sizeof(int) * input);
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
return arr;
}
int main(void) {
int* arr = change();
printf("arr[0] : %d\n", arr[0]);
printf("arr[1] : %d\n", arr[1]);
printf("arr[2] : %d\n", arr[2]);
// 절대로 arr을 반납처리하는게 아니다.
// arr은 지역변수이기 때문에 자동반납처리 된다.
// free => malloc에 의해서 받은 땅을 반납처리한다.
free(arr);
return 0;
}
컴파일 타임
- c언어를 기계어로 바꾸는 시간
- 정적할당에 필요한 크기 계산
런 타임
- 기계어를 실행하는 시간
- 동적할당에 필요한 크기 계산
구조체 단점
매번 struct를 쓰는 게 귀찮
그럴 떄는 typedef 를 쓰고 {}뒤에 구조체명(Person;) 쓰면
struct 생략 후 구조체명만 쓰면 됨.
typedef struct _Person {
int age;
char name[100];
} Person;