본문 바로가기
해피 코딩/Algorithm

[Day 1] C언어의 메모리 구조 이해 / Stack구현

by happy-coding 2026. 1. 1.
📝 2025 C언어 특강 내용 기록

😼 Github : https://github.com/mad-cost/C-structures-basics

💾 메모리 영역 4가지

프로그램이 실행되면
메모리는 크게 4가지 영역으로 나뉩니다.

 

Stack / Heap / Data / Code

 

각 영역을 아주 간단히 정리하면 다음과 같습니다.


Stack

Stack 영역은 함수 호출 시 사용되는 공간으로
지역 변수와 매개변수가 저장됩니다.

함수가 종료되면 자동으로 메모리가 해제 된다.

 

Heap

Heap 영역은 사용자가 필요에 따라

동적으로 메모리를 할당하는 영역입니다.

 

C언어를 배우다 보면
포인터와 구조체 그리고 malloc에서 한 번쯤 멈추게 되는데요 🤣
바로 그 malloc으로 할당되는 메모리가
Heap 영역에 저장됩니다.

 

동적 메모리는 Heap 영역에 할당되며,
할당만 하고 해제하지 않으면

 

더 이상 사용되지 않는 메모리가
계속 남아 있는 Leak(메모리 누수) 현상이 발생합니다.

할당도, 해제도 전부 개발자 책임

 

Data

Data 영역은 전역 변수와 정적 변수가 저장되는 영역입니다.

프로그램 시작 시 할당되고
프로그램 종료 시 해제됩니다.

 

Code

실행할 프로그램의 명령어,
기계어 코드가 저장되는 영역입니다.


텍스트 영역(Text 영역)이라고도 불립니다.

 

🎯 정리

Stack, Data, Code 영역은
코드에 의해 자동으로 할당과 해제가 이루어지지만,

 

Heap 영역은 사용자가 직접 관리해야 한다는 점이

가장 큰 차이입니다.

 

그래서 이번 특강에서는

  • malloc을 이용한 동적 할당
  • 구조체를 자유롭게 다루는 연습
  • Linked List를 코드 레벨에서 직접 구현

하는 것이 목표입니다.


📋 Day 1. 요구사항 정리

다음은 배열을 이용한 Stack 구현 프로그램이다.
사용자는 메뉴를 통해 스택에 데이터를 push / pop / 확인 / 종료할 수 있다.

 

⚠️ 기본 조건

  • main()에 있는 서비스 로직을 메서드로 분리할 것
  • 전역 변수 사용 금지 (포인터의 이해도를 높이기 위해)
  • 스택의 최대 크기는 10개
----- stack -----
1.push  2.pop  3.확인  4.종료
메뉴 선택 : 1

 

1️⃣ push 기능

사용자가 입력한 값을 스택에 저장한다. [최대 10개]

스택이 가득 찬 경우 "스택이 가득차 있습니다" 출력

----- stack -----
1.push  2.pop  3.확인  4.종료
메뉴 선택 : 1
저장할 데이터 : 

 

2️⃣pop 기능

스택의 마지막 데이터를 하나 제거한다.

스택이 비어 있는 경우 "꺼낼 데이터가 없습니다" 출력

1.push  2.pop  3.확인  4.종료
메뉴 선택 : 2
마지막 데이터를 스택에서 꺼냈습니다

 

3️⃣ 확인 기능

1.push  2.pop  3.확인  4.종료
메뉴 선택 : 3
스택에는
1 2 3 4 5 이 저장되어 있습니다

 

4️⃣ 종료 기능

1.push  2.pop  3.확인  4.종료
메뉴 선택 : 4
프로그램 종료

📚 다음 시간까지 

  • 동적 메모리 할당 (malloc, free)
  • 구조체 / 자기 참조 구조체
  • Linked List 자료구조