본문 바로가기
IT 이것저것

[메모리] 동적할당과 정적할당 특징 비교

by 관성맨 2023. 1. 15.
반응형

 

 

동적할당, 정적할당 개

 

 

동적은 Dynamic이라고 하고, 정적은 Static이라고 한다.

 

동적(Dynamic)할당과 정적(Statics)할당은 메모리의 할당과 해제를 언제 하느냐에 따라 구분된다. 

 

 

 

동적할당은 프로그램을 실행하는 도중에 메모리의 할당을 결정한다.

즉, 프로그램 실행단계에서 기억공간의 크기를 필요한 크기만큼 할당하고, 다 쓰면 직접 반납을 해줘야 한다.

 

 

 

 

정적할당은  컴파일(compile) 단계에서 메모리가 미리 할당되고, 함수혹은 프로그램이 끝나면 소멸된다.
즉, 메모리의 크기가 하드코딩 되어있고 프로그램의 시작 전 해당 메모리의 크기가 결정되어 함수가 종료되거나 프로그램이 종료되면 메모리 공간은 자동으로 반납된다.

 

정적할당의 경우 프로그램이 종료되면 자동으로 반납되기 때문에 메모리 누수를 걱정하지 않아도 된다.

컴파일이 되면 메모리 영역이 할당되고 그 이후, 해당 프로그램 및 함수가 종료되면 OS(운영체제)가 자동으로 해당 메모리 공간을 회수해간다.

사용이 끝난 메모리 영역은 자동으로 회수되므로 메모리 영역에 누수가 생기지 않는다.

 

하지만, 정적할당의 경우 컴파일 단계에서 stack영역에 메모리의 크기가 하드코딩 되어 있기 때문에 처음에 메모리의 크기를 많이 할당해 놓으면 해당 프로그램이 끝날 때까지 메모리 영역의 낭비가 생길 수 있다.

 

즉, 처음에는 10000만큼의 메모리 영역이 필요해서 할당했는데, 뒤로 갈수록 10만큼의 영역만 필요하다고 해도 메모리의 크기를 조절할 수가 없다. 컴파일 단계에서 메모리의 크기가 할당되면 프로그램 실행 도중에 메모리 크기를 변경할 수 없기 때문이다.

 

그렇기 때문에 9990만큼의 메모리 영역은 낭비되는 상황이 생길 수 있고,

만약 메모리의 크기가 더 필요한 상황이 와도 추가로 프로그램 실행도중에는 추가로 할당받을 수가 없다.

 

 

 

 

 

동적할당은 프로그램 실행단계에서 메모리 영역의 크기가 결정된다.

프로그램 실행 도중 Heap영역에 메모리가 할당되며 프로그래머에 의해 할당(new) 및 소멸(delete) 된다.

 

즉, 동적 할당의 경우에는 프로그래머가 코드를 어떻게 짜느냐에 따라 할당 및 소멸의 유무 및 위치가 달라진다.

동적으로 메모리를 할당할 때에는 new연산자를 사용하고, 사용 후 반납시에는 delete연산자를 사용한다.

 

 

 

 

 

 

 

동적할당, 정적할당 특징 비교

 

  정적할당 동적할당
특징 함수 종료 시 메모리영역 자동 반납
-> 메모리 누수 걱정은 없으나 메모리의 비효율적인 할당가능성 존재


메모리 영역 하드코딩되어 메모리 영역크기 변경 불가


Stack 영역에 할당


컴파일(compile)단계에서 메모리 할당
사용자 원할 때 메모리영역 할당(new), 반납(delete) 연산자로 수동 반납필요
-> 메모리 누수 가능성 존재


원하는 만큼 유동적으로 메모리 영역 크기 변경 가능


Heap 영역에 할당


실행단계에서 메모리 할당

 

반응형

댓글