0. 들어가기
프로그램은 메모리에 올라가야 실행할 수 있다. 컴퓨터 시스템의 효율적인 동작을 위해 메모리의 부분을 나눠 메모리 구조를 설계했다. 각각의 메모리 구조는 서로 다른 역할을 수행하는데, 메모리 구조에 대해 알아보자.
1. 메모리 구조
1.1 Code segement
Code segement는 text ,code section(코드 세그먼트;텍스트;코드 섹션)이라고 불리며, 실제 프로그램의 실행 코드가 저장되는 곳이다.
CPU가 명령어를 가져와 실행하는 곳이며, 프로그램 실행 중에는 메모리의 읽기 전용 영역으로 관리되어 코드를 수정하는 것이 불가능하다.
1.2 Data
Data는 데이터 영역, 데이터 섹션으로 불리며 전역 변수와 정적 변수를 저장하는 데 사용된다.
프로그램의 시작부터 끝까지 유지된다. 프로그램의 상태를 저장하는데 사용된다.
1.3 Heap
Heap 힙 영역은 실행 시간에 필요에 따라 동적으로 할당하는 메모리 영역이다.
주로 동적으로 생성되는 데이터, 객체(인스턴스), 배열 등을 저장하는 데 사용된다.
예를 들어 main함수 안에서 배열 변수 arr[]을 선언하면 arr은 지역 변수이기 때문에 stack 영역에 저장된다.
여기서 new를 통해 배열을 할당해 주면, arr은 해당 배열의 시작 위치를 참조하는 변수가 되는데, 이 때 배열의 실제 위치가 heap이다.
Java에서는 JVM이 메모리 관리를 해 주기 때문에 메모리의 할당 해제를 개발자가 직접 써줄 필요는 없다.
1.4 스택 영역
Stack 스택 영역은 데이터를 임시로 저장하거나 함수 호출과 복귀에 필요한 정보를 저장하는 데 사용된다.
함수 호출 시에 함수의 매개변수, 지역 변수, 복귀 주소 등이 스택에 저장되었다가, 함수가 종료되면 스택에서 제거된다.
LIFO(Last In First Out)방식으로 데이터를 저장한다.
'개발' 카테고리의 다른 글
Download pre-built shared indexes 공유 인덱스(인덱싱) 알림, 경고(IntelliJ) (0) | 2023.08.05 |
---|---|
Microsoft Defender configuration(IntelliJ)알림, 경고(윈도우 디펜더 제외:InetlliJ) (0) | 2023.08.05 |
[HTTP] GET, POST method (0) | 2023.08.03 |
메타태그(meta tag), 메타데이터(meta data)란 무엇일까? (0) | 2023.08.03 |
Ajax(정보 교환 기법) 에이잭스를 알아보자 (0) | 2023.08.01 |