본문 바로가기
카테고리 없음

c언어 : 동적할당

by 임숙숙 2024. 9. 1.

 

동적할당 은 #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;