[C언어] 동적할당 vs 정적할당

현집·2023년 4월 12일
0

C언어로 구현하기

목록 보기
2/4
post-thumbnail

메모리 동적 할당을 구현하기 앞서 메모리 동적 할당이 무엇인가, 왜 필요한가에 대해 먼저 알아보자.

메모리 할당에는 두가지 방법이 있다.

1. 정적할당(Static Memory Allocation)

프로그램이 실행되기 전에 컴파일 시간에 변수 또는 배열에 메모리를 할당한다.
프로그램이 실행되기 전에 메모리의 크기와 위치가 결정된다.

장점 : 빠른 속도로 간편하게 사용 가능하다.
단점 : 프로그램의 실행 중에 크기를 변경할 수 없으며, 필요하지 않은 경우에도 계속해서 메모리를 차지하게 된다.

ex) 만약에 회원들 정보가 저장된 배열이 있다고 생각해보자. 만일 배열의 크기를 1,000,000,000 이런식으로 크게 준다고 해도 언젠가는 배열이 꽉차고 새로운 회원을 저장할 수 없게된다. 만일 회원 누군가가 탈퇴를 해도 그 회원의 정보는 메모리 차지를 하고 있다. 의미없게 귀한 메모리를 쓰고 있는 거다. (스스로 극복할 수 없는 정적할당의 단점)

2. 동적할당(Dynamic Memory Allocation)

프로그램이 실행 중메모리를 할당하고, 해제한다.
프로그램이 필요한 메모리의 크기와 위치를 동적으로 조정할 수 있다.

장점 : 유연성이 높아지며, 효율적인 메모리 사용이 가능하다.
단점 : 할당하고 해제하는 과정에서 오버헤드가 발생하며, 메모리 누수나 해제된 메모리에 대한 포인터 역참조 등의 문제가 발생할 수 있다. (잘 관리하면 동적할당의 단점은 극복가능)


동적할당으로 정적할당 단점을 극뽁 할 수 있다!


그렇다면 그럼 정적, 동적할당으로 할당한 메모리는 어디 있을까?

정적할당은 data영역에, 동적할당은 heap부분에 저장된다.

정적할당은 c언어 걸음마를 뗀 순간부터 지금까지 잘 사용해오고 있던 것이다. 정적할당인지 몰랐을 뿐.
그럼 동적할당을 사용해보자. 어떻게? malloc을 사용하여! 근데 그냥 사용할거야?
그전에 구현 한 번 해보자고~ 그것이 진정한 개발자. 아니겠어? (아니고 싶은 마음 30% 정도...)

0개의 댓글