메모리 할당과 해제에 대한 이야기
- 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[] ㅇㅇㅇ 이렇게 해주어야 한다.
'C++ > [AssortRock] C++ 기초 다지기' 카테고리의 다른 글
CPP_1. AssortRock 7일차 오프라인 수업_220915 (0) | 2022.09.16 |
---|---|
CPP_1. AssortRock 6일차 오프라인 수업_220914 (0) | 2022.09.15 |
CPP_1. AssortRock 4일차 오프라인 수업_220908 (0) | 2022.09.11 |
CPP_1. AssortRock 3일차 오프라인 수업_220907 (0) | 2022.09.08 |
CPP_1. AssortRock 1일차 오프라인 수업_220905 (0) | 2022.09.06 |
댓글