프로그램이 실행되기 위해서는 메모리에 실행될 프로그램이 로드되어야 함
또한, 프로그램에서 사용될 변수들을 저장할 메모리도 필요함
즉, 운영체제는 메모리에 프로그램을 실행할 수 있도록 다양한 메모리를 제공함
그 메모리는 코드 / 데이터 / 스택 / 힙 으로 구성됨
실행할 프로그램의 코드가 저장되는 영역을 말함
텍스트 영역이라고 부름
프로그램의 전역 변수와 정적 변수가 저장되는 영역을 말함
프로그램 시작과 생성되고, 프로그램 종료될 때 소멸함
데이터 영역은 data 영역과 bss 영역으로 구성됨
data 영역에는 초기화 된 데이터 저장됨
bss 영역에는 초기화 되지 않은 데이터 저장됨
초기화 된 데이터는 ROM에 저장되는데
초기화 되지 않은 데이터까지 ROM에 저장하면 공간 낭비됨
즉, RAM과 ROM에 저장될 데이터를 구분하여 공간 낭비를 제거함
함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역임
스택 영역은 함수가 호출될 때 할당되고, 호출이 완료되면 소멸함
메모리 주소는 높은 주소 ▶ 낮은 주소로 할당
스택 영역은 푸시(push)로 데이터를 저장하고, 팝(pop)으로 데이터를 반환함
후입선출(LIFO : Last In First Out) 방식에 따라 가장 늦게 저장된 데이터를 가장 먼저 반환함
사용자가 직접 관리 할 수 있고, 해야만 하는 영역임
힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당 또는 해제됨
메모리 주소는 낮은 주소 ▶ 높은 주소로 할당
☆
사용자가 사용하고 난 후에는 반드시 메모리 해제를 해야함
안하면?
메모리 누수가 발생함
★
스위프트에서는 클래스의 인스턴스나 클로저 같은 참조 타입의 값들이
모두 힙 영역에 자동 저장됨
또한 사용자가 사용하고 난 후에는 해제해야 하는 역할을
ARC를 통해 자동으로 해제함
★ ★ ★
스택과 힙은 같은 메모리 공간을 사용함
스택과 힙은 서로 상반되는 주소 할당을 받음
따라서 스택이 더 많이 받으면 상대적으로 힙은 더 적게 받게 되고
그 반대일 경우에도 상반되게 받음
출처
https://tcpschool.com/c/c_memory_structure
https://velog.io/@min0505/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0
'CS' 카테고리의 다른 글
변수, 상수명 잘 짓기 (0) | 2024.03.22 |
---|---|
싱글톤 패턴 (0) | 2023.12.11 |