- 한정된 자원 내에서 프로그램을 효율적으로 작동시키기 위해선 Memory에 대한 이해가 필수적
- 자료구조를 Memory 내에 잘 형성할 수 있어야 함
Memory(RAM) 구조
1. Text
- 사용자가 작성한 프로그램 자체가 저장되는 부분. CPU에게 명령을 내리는 구체적인 명령어들이 저장됨
- CPU가 이 영역에 저장된 명령어를 하나씩 읽어서 처리함
2. Data
- 명령어 외의 Data에 해당하는 부분이 저장되는 부분
- Global / Static Variable이 저장됨
- main 함수 호출 전, 즉 프로그램 실행 전에 선언되어 프로그램이 끝날 때 까지 메모리에 남아있는 변수들
- 프로그램 종료 시 사라짐
3. Stack
- 프로그램 실행 시 필요한 공간을 미리 예상해서 여러가지 용도로 사용하기 위해 잡아놓는 segment
- 내부적으로 Stack이라는 자료구조를 사용하여 Stack이라는 이름이 붙음 (아래 설명)
- main 함수 내의 변수들과 함수 호출 시 함수의 지역변수와 매개변수가 저장되는 영역
- 함수 호출 시 할당되며, 함수 종료 시 해당 변수들을 Memory에서 해제 (Pop)
- 정적(Static)으로 할당되는 Memory
- Heap과 반대로 높은 주소에서 낮은 주소로 할당
- Compile 시 크기가 결정됨
- Compile : 사용자가 작성한 코드를 컴퓨터가 실행 가능한 기계어로 변환하는 과정
* Stackoverflow
- 함수를 반복적으로 재귀호출할 경우, Stack 영역에 해당 함수의 지역변수가 계속 할당됨
- 이 때, OS에서 할당한 Stack 영역을 초과할 경우 Stackoverflow Error가 발생 (사용 가능한 최대 용량이 정해져있음)
3.1. 자료구조 관점에서의 Stack
- Stack은 무언가를 쌓는 것을 뜻함 : 즉 Data를 아래서부터 하나씩 쌓아올린 형태의 선형 자료구조를 뜻함
- 가장 처음 들어간 Data가 가장 마지막에 나오는 LIFO (Last In First Out, 후입 선출) 구조
- 새로운 Data 입력 시 TOP가 가리키는 가장 위쪽의 주소에 쌓임
- 한 쪽 끝에서만 Data의 입출력이 가능하며, TOP으로 정한 곳을 통해서만 접근 가능
- 삽입 연산은 Push, 삭제 연산은 Pop 이라고 함
- 함수의 지역변수가 저장되는 영역
활용 예시
- Interrupt 처리, 정렬, 산술연산, 재귀 알고리즘, undo 등에 사용
- Data를 임시적으로 저장하고 추후 역순으로 처리할 때 유용
장점
- 타 자료구조에 비해 구조가 간단하고 단순하여 구현이 쉬우며 Data 추가 / 제거가 빠르게 진행될 수 있음
- 정해진 크기의 Memory를 사용하여 Memory 관리가 용이함
- 필요한 만큼의 공간만 사용
단점
- Static하게 할당되는 Memory이므로, 제한된 크기를 가짐
- 이를 초과할 시 overflow가 발생함
- LIFO 구조를 지녀 중간의 Data에 접근하려면 마지막에 들어온 Data들을 순차적으로 제거해야 함 : 비효율적 접근
4. Heap
- 미리 크기를 알 수 없는 Memory가 사용하는 부분
- 사용자에 의해 관리되는 영역
- 동적(Dynamic)으로 할당되는 Memory
- Heap은 컴퓨터 사양에 따라 거의 무제한, 즉 컴퓨터의 하드웨어를 최대한 활용할 수 있음
- OS가 안에 가상의 커다란 메모리가 있는 것 처럼 관리를 해줌
- Application이 종료될 때 까지 Memory가 유지되므로, 할당받은 Memory는 반드시 반환을 해줘야 함
- Object Reference가 저장되는 영역
- Heap 영역 내의 Object를 가리키는 Reference variable은 Stack에 적재
- 낮은 주소에서 높은 주소로 할당
- Runtime시 크기가 결정됨
- Runtime : Compile 후 프로그램이 동작하는 시점
- Memory 구조에서 Queue의 역할을 함
- Heap은 Memory 관련 용어, Queue는 자료구조 관련 용어
4.1. Queue
- Stack과 달리 먼저 들어온 Data가 먼저 나가는 FIFO (First In First Out. 선입선출) 구조
- Enqueue(삽입) 연산이 진행되는 Rear / Dequeue(삭제) 연산이 진행되는 Front 로 나뉨
활용 예시
- 입출력 처리 타이밍 조절용 버퍼 / 일정하지 않은 시간 간격으로 들어오는 데이터 처리에 활용 가능
Stack vs Queue
- Stack과 Queue 모두 컴퓨터 혹은 I/O 장치의 Data를 임시로 저장할 때 사용
- 모든 Data를 Memory address와 Index를 지정해가며 사용하기 복잡함
- 따라서 stack과 queue를 통해 array의 요소에 접근 가능하게 함
- Stack과 Heap은 같은 공간을 공유
- 서로의 영역을 침범하는 경우 Stackoverflow / Heapoverflow 발생
참고 자료 :
[자료구조] 스택(Stack)과 큐(Queue)에 대해서 알아보자!
📌 스택(Stack)이란 무엇일까? 스택(Stack)은 "쌓다"라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다. 조금 더 설명하자면, 위의 사진과 같이 데이터가 순서대로 쌓이며 가장 마지
jud00.tistory.com
https://velog.io/@seungho1216/CS-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0
[CS] 메모리 구조
프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 한다.메모리가 올라가지 않은 상태는 그저 코드 덩어리일 뿐..메모리가 올라간다는 것은 코드의 부분부분에 적당한
velog.io
https://beenii.tistory.com/161
메모리 구조에서 Stack과 Queue의 역할
메모리 구조에서 왜 Stack과 Queue가 필요하지? 라고 생각하실 수 있겠지만.. 메모리 구조를 공부하시다보면 스택, 힙, 데이터, 코드 영역이 있는 거 아시죠? 여기서 스택 영역을 우리가 생각하는 Sta
beenii.tistory.com
https://velog.io/@alkwen0996/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9DStack
[자료구조] | 스택(Stack)
스택이란? > 스택은 한쪽 끝에서만 데이터를 넣고 뺄 수 있는 제한적으로 접근할 수 있는 후입선출(Last-In-First-Out) 형태의 선형 자료구조이다. 기본적으로 클래스는 내부에서 최상위 타입 배열인
velog.io
https://hoehen-flug.tistory.com/30
[자료구조] 스택(Stack) 자료구조 알아보기 & Java 예제 코드
오늘은 자료구조 중 Stack에 대해 정리해봤다. 스택(Stack)이란? 자료구조 중 하나로 후입선출(Last-In-First-Out, LIFO) 원칙에 따라 데이터를 저장하는 추상 자료형이다. 스택은 데이터를 저장하는 컨테
hoehen-flug.tistory.com
[운영체제] 메모리 구조
📌 메모리 구조 프로그램이 실행되기 위해선 먼저 프로그램이 메모리에 로드되어야한다. 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고, 각각의 메모리 공간은
velog.io
https://st-lab.tistory.com/198
메모리 구조 [Memory Structure]
안녕하세요. 오늘은 제목에서 밝혔듯 메모리 구조에 대해 알아보려 합니다. 흔히 메모리라고 하면 RAM을 지칭하는데요, 보통 컴퓨터 구조에 대해 학습하시거나 배우셨던 분들은 알겠지만 메모리
st-lab.tistory.com
'Study_Programming' 카테고리의 다른 글
Visual Studio Project 이름 변경법 (0) | 2025.09.30 |
---|---|
DLL(Dynamic Link Library)이란 (0) | 2024.07.30 |