참고자료 : https://medium.com/jinshine-기술-블로그/컴퓨터-기초-메모리구조-memory-structure-4fa6010f333e
프로그램이 실행하게 되면 운영체제(OS)는 메모리(RAM)에 공간을 할당해준다.
메모리 공간 종류는 4가지 : Code, Data, Heap, Stack
import Foundationvar a: Int = 10; // 데이터 영역에 할당
var b: Int = 20; // 데이터 영역에 할당func dataFunc() -> Bool {
return true
}
func someFunc1(c: Int) {
int d = 30;
// 매개변수 c와 지역변수 d가 스택영역에 할당
}void someFunc2(e: Int) {
int f = 40;
// 매개변수 e와 지역변수 f가 스택영역에 할당
}
위의 HEAP과 STACK영역은 사실 같은 공간을 공유한다. HEAP이 메모리 위쪽 주소부터 할당되면 STACK은 아래쪽부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 HEAP OVERFLOW, STACK OVERFLOW라고 칭합니다.
Stack 영역이 크면 클 수록 Heap 영역이 작아지고, Heap 영역이 크면 클수록 Stack 영역이 작아집니다.
컴파일과 런 타임 차이점?
컴파일이란?
여기서 Java언어는 조금 다른데, 자바 언어를 컴파일 하면 바이트코드가 생성된다. 이는 컴퓨터(H/W)가 이해할 수 없는 언어이다. 자바가 컴파일한 언어를 이해할 수 있는 기계는 바로 JVM(Java Virtual Machine)이다.
즉, 자바 언어를 컴파일한 바이트 코드를 이해할 수 있는 기계는 바로 JVM을 의미한다는 것을 알 수 있다.
런타임이란?
컴파일 에러