본문 바로가기
I LEARNED/자료구조

[자료 구조]정적할당?동적할당?

by veganwithbacon 2023. 4. 26.
반응형

 

 

C++에서 생성자와 소멸자에 대해 키워드를 많이 접하게되다보니 궁금증이 생겨 좀더 공부하게 됐다.

 

우선 정적할당(Static allocation)과 동적할당(Dynamic allocation)은 프로그래밍 언어에서 변수나 메모리 공간을 할당하는 방법을 나타내는 용어다.


프로그래밍 관점으로 본다면 메모리 영역은 stack과 heap으로 나눌 수 있는데,  정적으로 메모리를 할당하면 컴파일 시 stack 영역에 할당되며, 함수를 빠져나갈 때 소멸된다.

반면 동적으로 메모리를 할당할 경우 데이터가 heap 영역에 할당된다. heap은 프로그래머에 의해 할당되거나 소멸되기 때문에 프로그래머가 원할 때 원하는 크기로 할당이 가능하다.

포인터 변수는 예외로 stack에 할당된다.


  정적할당(Static allocation)

  • 프로그램이 컴파일되는 시점에 메모리 공간이 할당된다.
  • 프로그램이 실행 중에는 변경할 수 없다.
  • 전역 변수나 정적 변수 등으로 선언되며, 프로그램의 시작과 함께 할당된다.
  • 할당된 메모리 공간이 해제되지 않고 유지된다.
  • 메모리 소비량과 관련된 문제가 발생할 수 있다.
  • 프로그램 실행 속도가 빠르다.
  • 사용이 쉽고 안정적이다.

  동적할당(Dynamic allocation)

  • 프로그램 실행 중에 메모리 공간이 할당된다.
  • 프로그램이 실행 중에 크기나 개수 등을 변경할 수 있다.
  • malloc(), calloc(), new 등의 함수나 연산자를 사용하여 동적으로 할당된다.
  • 할당된 메모리 공간은 필요한 시점에 해제되어야 힌다.
  • 메모리 소비량을 유연하게 조절할 수 있다.
  • 프로그램 실행 속도가 느릴 수 있다.
  • 사용이 복잡하고 안정성이 낮을 수 있다

또한, 동적할당은 포인터 변수를 사용하여 할당된 메모리 공간에 접근해야 한다. 포인터 변수를 잘못 사용하거나 해제하지 않으면 메모리 누수(memory leak) 현상이 발생하여 메모리 공간이 계속해서 소비될 수 있다. 이에 대한 예방 및 해결을 위해서는 적절한 프로그래밍 기술과 디버깅 도구를 활용해야 한다.

 

정적할당과 동적할당 모두 장단점이 있기에 상황에 따라 적절한 방법을 선택해 사용해야 한다.

예를 들어, 데이터 크기가 작고 개수가 정해져 있는 경우에는 정적할당이 적합하며, 데이터 크기나 개수가 동적으로 변화하는 경우에는 동적할당이 적합하다.

 

반응형

댓글