본문 바로가기
C++/[AssortRock] C++ 기초 다지기

CPP_1. AssortRock 5일차 오프라인 수업_220913

by 헛둘이 2022. 9. 15.
메모리 할당과 해제에 대한 이야기
  •  C++의 장점은 메모리를 직접 할당하고 해제할 수 있는 것.
  • 자바나 C#의 경우 가비지컬렉터가 관리해주는데 할당/해제에서 끊기는 문제가 있다.
  • 그래서 유니티에서는 메모리풀이라는 기술을 쓴다.

 

동적할당에 대한 이야기
  • 사용자가 필요한 메모리가 얼만큼인지 알 수 없다.
  • 스택의 크기는 정해져 있다. (VS 기준 기본 1MB)
  • MB 단위로 스택이 정해진다.
  • 스택(지역변수), 데이터영역(전역, 정적 변수) 이 친구들은 프로그램이 실행될 때 한번만 정해짐
  • 따라서 프로그램 동작 중에 메모리를 필요한 만큼 할당할 수 있는 방법 필요
  • 그 방법이 힙 메모리에 메모리를 할당하는 동적할당 기법이다.
  • (malloc, free, new, delete)

 

C언어에서의 동적 할당
  • malloc (memory allocate)
  • 힙영역에 n바이트만큼 메모리를 할당하는 문법. void*를 반환하므로 받을 때 타입캐스팅을 통해 타입을 맞춰줘야 함
  • void*는 단순히 주소값을 보관하는 용도

 

sizeof에 대한 이야기
  • 사이즈를 하드코딩하는 것보단 sizeof 연산자를 통해 타입의 크기를 구해서 인자로 집어넣는게 좋다.
  • sizeof는 연산자라 내부구현을 볼 수 없다.

 

바이트패딩에 대한 이야기
  • int, int char 멤버를 가진 구조체의 사이즈가 왜 12바이트인가에 대한 의문(4 + 4 +1 = 9가 아님)
  • 바이트를 얼만큼 사용하느냐는 CPU가 정한다.
  • 4, 4, 1바이트를 가진 구조체의 경우 (바이트 수, 값) x 3을 6개를 연산해야 하지만
  • 4, 4, 4바이트로 맞춰주게 되면 (바이트 수, 값), (값), (값) 이렇게 총 4번만 연산하면 되므로 효율적이다.

 

free에 대한 이야기
  • malloc을 이용해서 메모리를 할당한 후 해제할 때 사용한다.

 

malloc으로 할당했을 때의 단점
  • 할당받은 배열을 다시 초기화해주어야 한다.
  • 주로 memset 사용한다.

 

calloc에 대한 이야기
  • calloc은 개수와 그 개수의 바이트 수를 인자로 받고, 메모리를 할당한 후 0으로 초기화해준다.

 

 

realloc에 대한 이야기
  • 메모리 재할당 문법이며, 해제하고 할당하는게 귀찮으므로 그 과정을 대신해준다.

 

new와 delete에 대한 이야기
  • C++에서 제공하는 메모리 할당 문법
  • new 자료형[크기]; 이렇게 넣어주면 됨
  • malloc에서 sizeof와 형변환 문법이 생략된 형태
  • delete는 new로 할당된 메모리를 해제해주는 문법
  • new로 배열을 할당했으면 delete[] ㅇㅇㅇ 이렇게 해주어야 한다.

 

댓글