단순히 어떠한 데이터를 휘발성으로 임시보관하고 있는 장소로만 알고 있으며 정확히 ‘메모리가 무엇인가’ 또한 ‘메모리가 어떤 일을 수행하는가’에 대해서 심층적으로 이해하기 위해 학습하게 되었습니다.
보조기억장치에 to 메모리
로 적재main
을 찾아 진입Code
: 작성되는 모든 코드들이 올라가는 영역 순차적
으로 한줄씩 실행
Data
: 전역변수 선언 시 할당되는 영역 - 외부에서 접근 가능 공유 영역
Heap
: 인스턴스 할당 시 메모리 주소 할당 - 외부에서 접근 가능 공유 영역
Stack
: 함수 실행 시 실행에 필요한 메모리 공간 생성(스택 프레임) - 공유불가 영역
스택프레임 내부에 메모리 공간 미생성
리턴 값 미존재 함수 | 리턴값 존재 함수 |
---|---|
임시 메모리 공간 미생성 | 임시 메모리 공간 생성 |
(함수 실행 후 값 반환을 위해) | |
함수 실행 시 CPU 제어권 할당 | |
실행 종료 후 CPU 제어권 반환 |
함수 실행 시 CPU 제어권 할당 |
실행 종료 후 CPU 제어권 & 리턴값 반환 |
코드 예제
// Code - 작성한 모든 코드
class Yoonds {
// Data - 전역 변수 선언(외부에서 접근 가능)
var dataArea: Int = 5
func addNum(a: Int) -> Int {
let b = 10 // Stack 영역
dataArea = 20 // Data 영역에 존재하는 변수이기에 접근 가능
/*
전달받은 a값을 저장하기위해 스택 프레임 내 임시 메모리 생성
리턴 타입이 있는 관계로 리턴 값을 임시 저장할 스택 프레임 내 임시 메모리 생성
*/
return a + b
}
b = 20 // error b는 공유 불가한 Stack영역에 존재하기에 접근 불가
}
/*
인스턴스 생성 시 메모리 할당 (Heap 영역)
해당 메모리 주소는 Stack 영역에서 소유
*/
let yoonds = Yoonds() // 메모리 주소 예: e123d
/*
메모리 주소는 Heap영역의 메모리 주소
e123d를 주소 자체를 소유하는 것은 Stack영역
*/
// addNum 함수 실행 시 해당 함수를 Stack영역 내 스택프레임 생성
yoonds.addNum(a: 5) // 15
Heap
에 메모리 주소생성 - ex) e123d메모리 주소를 소유
(Stack
에서 소유)