장비업체의 하급 비전개발자

C++ 스택(Stack)과 힙(Heap)의 차이.. 본문

C++ 공부

C++ 스택(Stack)과 힙(Heap)의 차이..

진라면한사바리 2023. 3. 1. 16:11

C++로 프로그래밍을 하지만 정작 메모리관리, 자료구조, 알고리즘 등 자세히 알지 못하는 나는 요즘 공부를 하고있다. 이번에는 스택과 힙의 차이를 프로그래밍 관점에서 끄적여 보려고한다.

 

코드를 예로 들어보려고한다.

int Num = 9;

int *ptr = nullptr;
ptr = new int;

 

첫번째 줄의 처럼 로컬 변수 Num을 자동변수(automatic variable) 라고 부르면 스택에 저장된다. 이는 프로그램 실행흐름이 이 변수가 선언된 유효범위에 벗어나면 할당된 메모리가 자동으로 해제된다. 

두번째 줄처럼 new 를 사용하면 ptr변수는 스택에 생성되고, nullptr로 초기화후 동적으로 생성된 힙을 가리키게된다. 

여기서 스택과 힙의 특징들을 보자면 
스택  - 엑세스가 빠르다, 변수의 크기를 조정할 수 없다, CPU에 의해 효율적으로 관리되고 있다.

힙 - 엑세스가 느리다, 변수의 크기를 조정할 수 있다, 메모리를 관리해야한다.

 

코드를 잘못짜다보면 메모리가 증가하는 경우가 있는데 보통 new 이후 delete를 안해줘서 그런거라는것 정도는 알고 있었는데, 그 이유가 힙에 쌓인 메모리를 관리해주지 않아서 그런 것 이구나 라는 이해를 하게 되었다.