메모리 동적 할당을 구현하기 앞서 메모리 동적 할당이 무엇인가, 왜 필요한가에 대해 먼저 알아보자.
메모리 할당에는 두가지 방법이 있다.
프로그램이 실행되기 전에 컴파일 시간에 변수 또는 배열에 메모리를 할당한다.
프로그램이 실행되기 전에 메모리의 크기와 위치가 결정된다.
장점 : 빠른 속도로 간편하게 사용 가능하다.
단점 : 프로그램의 실행 중에 크기를 변경할 수 없으며, 필요하지 않은 경우에도 계속해서 메모리를 차지하게 된다.
ex) 만약에 회원들 정보가 저장된 배열이 있다고 생각해보자. 만일 배열의 크기를 1,000,000,000 이런식으로 크게 준다고 해도 언젠가는 배열이 꽉차고 새로운 회원을 저장할 수 없게된다. 만일 회원 누군가가 탈퇴를 해도 그 회원의 정보는 메모리 차지를 하고 있다. 의미없게 귀한 메모리를 쓰고 있는 거다. (스스로 극복할 수 없는 정적할당의 단점)
프로그램이 실행 중에 메모리를 할당하고, 해제한다.
프로그램이 필요한 메모리의 크기와 위치를 동적으로 조정할 수 있다.
장점 : 유연성이 높아지며, 효율적인 메모리 사용이 가능하다.
단점 : 할당하고 해제하는 과정에서 오버헤드가 발생하며, 메모리 누수나 해제된 메모리에 대한 포인터 역참조 등의 문제가 발생할 수 있다. (잘 관리하면 동적할당의 단점은 극복가능)
그렇다면 그럼 정적, 동적할당으로 할당한 메모리는 어디 있을까?
정적할당은 data영역에, 동적할당은 heap부분에 저장된다.
정적할당은 c언어 걸음마를 뗀 순간부터 지금까지 잘 사용해오고 있던 것이다. 정적할당인지 몰랐을 뿐.
그럼 동적할당을 사용해보자. 어떻게? malloc을 사용하여! 근데 그냥 사용할거야?
그전에 구현 한 번 해보자고~ 그것이 진정한 개발자.
아니겠어? (아니고 싶은 마음 30% 정도...)