stack/heap memory

cornpip
|2023. 9. 16. 19:04

Stack Memory

함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.

함수가 호출되면 호출이 끝난 뒤 돌아갈 반환 주소값, 함수의 매개변수, 함수에서 선언된 지역 변수 등이 스택에 저장되고 호출이 완료되면 소멸한다.

 

stack memory의 모든 과정은 컴파일 타임에 미리 결정된다. 즉, 개발자가 코드를 작성하지 않는다.

 

stack은 독립적인 스레드에서 실행된다.

 

stack은 heap보다 할당/해제가 빠르다.

why => 스택은 미리 예약된 메모리이기 때문에 메모리 할당이 따로 필요없으며, 사용한 메모리를 굳이 반납하지 않고 (= 삭제 작업을 거치지 않고) 단순히 스택 포인터를 감소시킴으로써 스택 공간을 제한시킨다. 스택 포인터를 감소시키면서 남아있던 데이터는 스택 포인터가 다시 증가할 때 사용했던 공간을 단순히 덮어 쓰는 식으로 사용된다.

 

스택에 저장되는 데이터를 스택 프레임이라 하고 FILO으로 동작한다.

 

stack overflow는 stack memory의 공간을 초과했을 때 발생한다.

 

Heap Memory

런타임에 결정되는 영역으로 동적인 메모리다. 즉, 개발자가 코드를 작성하여 컨트롤한다.

brk 및 sbrk 시스템 호출을 사용하여 크기를 조정할 수 있는 malloc, calloc, realloc 그리고 free 함수를 통해 관리된다.

 

heap은 수행중인 모든 스레드에서 참조할 수 있다. 즉, 스레드로 부터 안전하지 않다.

 

개발자가 heap memory를 잘 관리하지 못하면 메모리 누수(Memory Leak)가 발생할 수 있다.

 

heap은 stack보다 할당/해제가 느리다.

why => 앞의 이유의 반대이다. 메모리를 계산하고 판단해야하고 할당/해제 해야한다.

 

heap의 주요 문제는 동적 메모리 관리로 인한 메모리 단편화이다.

메모리 단편화 - 남은 공간을 합치면 가용 메모리가 충분하지만 작은 조각으로 나뉘어져 있어 할당이 불가능한 상태

 

참고 자료

https://blog.naver.com/PostView.nhn?blogId=techref&logNo=222274484731 

 

스택(Stack), 힙(Heap) 메모리의 차이점과 메모리 할당(Memory Allocation)

Stack Allocation Temporary Memory Allocation 스택(Stack)은 연속적인 메모리(Contiguous Memory...

blog.naver.com

https://jiwondev.tistory.com/86

 

자바에서 Stack Memory & Heap Memory

자바는 기본 자료형(primary type)을 제외하고 다른 모든 것을 레퍼런스 (포인터 참조값)으로 사용한다. 즉 힙메모리를 사용한다는 뜻인데, 왜 이렇게 만들었고 스택, 힙메모리를 구분지어 사용하는

jiwondev.tistory.com

http://www.tcpschool.com/c/c_memory_structure

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'CS,네트워크' 카테고리의 다른 글

Stomp protocol  (0) 2024.01.02
교착상태 Deadlock  (0) 2023.09.18
TCP/UDP Socket Protocol, Programming  (0) 2023.09.15