(형식) 변수 = 데이터
=을 기준으로 왼쪽은 변수, 오른쪽은 데이터라고 한다.
count = 3
- 코드 (Code) 영역:
- 프로그램의 "요리책"이라고 생각할 수 있다.
- 요리책에는 요리 방법(명령어)들이 적혀 있어서, 요리사가 이를 보고 요리를 만든다.
- 프로그램이 실행될 때, CPU가 이 요리책을 보고 무엇을 해야 할지 알아낸다.
- 프로그램의 실행 코드가 저장되는 영역이다.
- 주로 읽기 전용이며, 프로그램이 실행되면서 CPU가 명령어를 가져와 실행한다.
- 컴파일된 기계어 코드가 위치하며, 함수와 메소드 등이 포함된다.
- 보통 텍스트 세그먼트라고도 한다.
- 데이터 (Data) 영역:
- 주방의 "저장 공간"과 같다
- 모든 재료(전역 변수와 정적 변수)가 저장되어 있다.
- 프로그램 시작할 때 재료를 꺼내놓고, 프로그램이 끝날 때까지 그대로 두는 공간
- 초기화된 데이터는 레시피에 따라 이미 준비된 재료(초기화된 변수)이고, 초기화되지 않은 데이터는 아직 꺼내지 않은 재료(초기화되지 않은 변수)이다
- 전역 변수와 정적 변수가 저장되는 영역이다
- 프로그램 시작 시 할당되고 프로그램이 종료될 때까지 존재한다
- 데이터 영역은 다시 초기화된 데이터 세그먼트와 초기화되지 않은 데이터 세그먼트(BSS)로 나뉜다
- 스택 (Stack) 영역:
- 주방의 "작업대"라고 생각할 수 있다
- 요리사가 요리할 때 사용하는 도구(지역 변수와 매개변수)들이 여기 놓인다
- 작업대는 요리할 때 필요할 때마다 도구를 꺼내고, 요리가 끝나면 다시 제자리에 돌려놓는다
- 도구를 쓸 때마다 쌓아두고(할당), 다 쓰면 치우는(해제) 방식이다
- 함수 호출과 관련된 지역 변수, 매개변수, 리턴 주소 등을 저장하는 영역이다.
- LIFO(Last In, First Out) 구조로 관리되며, 함수 호출 시 할당되고 함수 종료 시 해제된다.
- 자동으로 관리되며, 컴파일러가 함수의 호출과 복귀에 따라 스택을 관리한다
- 메모리 주소는 높은 주소에서 낮은 주소로 할당된다
- java의 경우 main 함수가 끝나면 스택 영역(작업 영역)에서 사라지는 것을 예로 들 수 있다.
- 힙 (Heap) 영역:
- 주방의 "냉장고"라고 할 수 있다
- 필요한 재료(동적 메모리)를 요리 중간에 꺼내서 쓸 수 있다.
- 냉장고에서 재료를 꺼낼 때는 우리가 직접 꺼내고, 다 쓰고 나면 다시 냉장고에 넣어야 한다.
- 프로그래머가 직접 재료를 관리해야 해서, 잘못 관리하면 재료가 상하거나(메모리 누수) 냉장고가 꽉 차서 문제가 생길 수 있다.
- 동적 메모리 할당을 위해 사용되는 영역이다.
- 프로그램 실행 중 필요한 시점에 malloc, calloc, realloc 등의 함수를 사용하여 메모리를 할당하고, free 함수를 사용하여 해제한다.
- 힙 메모리는 프로그래머가 직접 관리해야 하며, 잘못된 관리(예: 메모리 누수, 이중 해제 등)는 프로그램의 안정성에 문제를 일으킬 수 있다.
- 메모리 주소는 낮은 주소에서 높은 주소로 할당된다.
- C언어는 직접 개발자가 garbage를 삭제하며, java에서는 garbage collector라는 소프트웨어를 사용해 삭제한다.
'C Language' 카테고리의 다른 글
C언어 Basic 조건문 if, switch 개념 (0) | 2024.06.18 |
---|---|
C언어 수식과 연산자의 의미 학습하기 (2) | 2024.06.13 |
C언어 변수에 대해 학습하기 (2) (2) | 2024.06.12 |
C언어 변수에 대해 학습하기 (2) | 2024.06.11 |
C언어 프로그램 개발의 basic (기본) (0) | 2024.06.10 |