Written by
java-style
on
on
[구조적 프로그래밍 - 3] 코드 실행과 함수 호출 스택
[구조적 프로그래밍 - 3] 코드 실행과 함수 호출 스택
Memory는
data text
코드가 올라오는 영역인 text,
코드가 실행되는데 필요한 데이터를 보관하는 영역인 data로 나뉜다.
함수의 지역변수는 Stack,
동적으로 생성되는 메모리는 Heap에 생성된다.
메모리 공간에 있는 코드는 바이너리로 올라가 있다.
프로그램은 로드가 되어 있지 않은, 죽어있는 상태다.
메모리에 올라간 프로그램은 프로세스라고 한다.
흐름이 진행되기 전에 메인함수에 필요한 준비물의 공간을 Stack에 미리 만든다.
준비된 공간은 다른 게 할당되지 못하도록 잠기고, 딱 알맞는 크기로만 할당된다.
코드가 진행되다 예약되지 않은 좌석이 필요할 땐, Heap에 입석이 마련된다.
함수의 지역변수는 Stack 위에 쌓이며, 일이 끝난 지역변수는 Stack에서 사라진다.
계단식 구조로 메모리가 사용되므로 Stack이라 한다.
data의 Heap과 Stack은 뚫려있다.
단지 Heap은 위에서부터, Stack은 아래에서부터 쌓이는 것이다.
중간에 접점에서 만나면, 메모리가 부족해 프로그램이 실행되지 못한다.
메인이 스택에서 제거되도, Heap은 계속 남아있다.
잘못하면 메모리만 잡아먹기 때문에, JAVA는 참조되지 않는 객체가 Heap에 있으면 GC를 통해 자동으로 지워준다.
from http://pluviayoungforever.tistory.com/46 by ccl(A) rewrite - 2021-11-17 07:02:21