<동적할당>
정적할당이라는 개념이 있다. 정적할당은 컴파일 과정에서 메모리에 공간이 할당되어 변수가 사용하는 것으로 프로그램이 시작된 이후에 변경이 불가능하고, 해제는 프로그램의 종료와 함께 이뤄진다.
하지만 프로그램 도중, 즉 런타임 중에 공간을 할당하고 해제하고 싶은 경우에는 이 방법을 사용할 수 없다. 여기서 나온 것이 바로 동적할당이다.
동적으로 공간을 할당하여 런타임 중에 개발자가 원하는 타이밍에 할당을 하고 해제를 할 수 있다는 것이 장점이다. 하지만 할당하는 과정에서 일어나는 퍼포먼스 저하가 있기 때문에 대용량의 공간을 할당할 필요가 있을 경우에는 동적할당이 맞지 않는다.
또한 인위적으로 할당을 해줬기 때문에 반드시 해제를 해줘야 하며, 해제를 하지 않을 경우 메모리 공간에 쓸 데 없이 사용되는 공간이 생겨 메모리 누수가 일어날 수 있다.
c와 c++에서 사용하는 함수, 키워드가 다르다.
<malloc, free>
c에서 사용하는 동적할당 및 해제 함수이다.. malloc을 이용해서 할당을 하고 free를 이용해 해제를 한다. c++에서는 키워드로 할당과 해제가 이뤄지지만 아직 c에서는 함수로만 가능하다.
특징은 공간을 할당할 변수와, 그 변수의 크기를 sizeof 함수를 통해 넘겨주어야 한다.
단순 할당을 하기 때문에 초기화는 할당 이후에 해주어야 한다. 또한 재할당을 할 경우에는 realloc 함수를 통해 재할당이 가능하다.
<new, delete>
c++에서 새롭게 등장한 키워드이다. OOP의 개념에서 동적할당을 하기 위해 만들어졌다. 변수를 정의할 때, 대입 연산자 뒤에 위치하며 new의 뒤에는 할당에 필요한 클래스의 생성자가 위치하게 된다. 기본적으로 클래스 이름만 붙이면 기본 생성자가 호출이 되며 재정의 생성자를 호출할 경우에는 매개 변수를 입력해줘야 한다.
c와의 차이점은 c는 함수로 할당이 이뤄지지만 c++은 키워드로 할당이 이뤄진다는 점이다. 또한, new는 malloc과 다르게 할당과 동시에 초기화가 이뤄진다는 특징이 있다.
또한 malloc과 free 둘 다 void*를 반환하는 함수이지만 new와 delete는 해당 객체의 타입에 맞는 포인터를 반환한다.
delete로 객체를 호출하게 되면 할당해제 전에 해당 객체의 소멸자가 호출이 된다는 특징이 있다.
'프로그래밍 > 키워드 정리' 카테고리의 다른 글
[C++] 복습용 키워드 정리 - 8 (0) | 2023.03.29 |
---|---|
[C++] 복습용 키워드 정리 - 7 (0) | 2023.03.25 |
[C++] 복습용 키워드 정리 - 5 (0) | 2023.03.14 |
[C++] 복습용 키워드 정리 - 4 (0) | 2023.03.13 |
[C++] 복습용 키워드 정리 - 3 (0) | 2023.03.12 |
댓글