[ 개요 ]
프로그래밍 문법 공부하는데 왜 메모리의 개념을 알아야 할까?
- 어떤 데이터가 어느 정도 크기의 메모리를 사용해야 하는지 알아야만 변수를 선언할 수 있다.
- 알고리즘의 성능을 고려하기 위함
1번은 어떠한 숫자 범위가 주어졌을 때 변수의 자료형(데이터 타입)을 결정하기 위함이다.
ex) 플레이어 레벨이 최대 10,000일 경우 이런 자료형을 가진 변수를 선언!
2번은 프로그래밍 줄이 길어질수록 최적화가 중요하고 내가 구현한 프로그램의 메모리 사용 공간을 줄이기 위함이다.
※ 그러나 메모리에 대해 자세히 알아야 할 필요는 없고 어떤 자료형을 사용해서 메모리 공간을 효율적으로 사용할 수 있을지 항상 염두해야 한다!
[ 개념 ]
메모리란 데이터를 저장할 수 있는 공간
컴퓨터 화면에 보이는 모든 데이터는 메모리에 존재해야만 화면에 보인다.
그렇기에 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다.
따라서 프로그래밍을 할 때 메모리에 데이터를 올려야지 실행이 되고 결과를 출력할 수 있다.
[ 단위 ]
- Bit(비트): 2진수인 0과 1로 데이터를 저장
- Byte(바이트): 8bit
- KByte(킬로바이트): 2^10 Byte
- MByte(메가바이트) 2^20: Byte
- GByte(기가바이트): 2^30 Byte
- TByte(테라바이트): 2^40 Byte
[ 메모리 구조 ]
프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같다.
- 코드(code) 영역
- 데이터(data) 영역
- 스택(stack) 영역
- 힙(heap) 영역
다음 그림은 운영체제가 제공하는 메모리의 구조이다.
코드(code) 영역
코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다.
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.
데이터(data) 영역
데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다.
데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸하는 특징을 가지고 있다.
스택(stack) 영역
스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.
함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸하는 특징을 가지고 있다.
푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출한다.
이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출된다. 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
힙(heap) 영역
힙(heap) 영역은 사용자가 직접 관리할 수 있는 메모리 영역이다.
사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
'C#문법' 카테고리의 다른 글
[C#문법] Part5-1 연산자:산술연산자 (1) | 2023.01.11 |
---|---|
[C#문법] Part4 주석 (6) | 2023.01.10 |
[C#문법] Part3 형변환(type conversion) (1) | 2023.01.09 |
[C#문법] Part2 사용자 입출력 (1) | 2023.01.09 |
[C#문법] Part1-2 변수(variable): 변수와 자료형 (5) | 2023.01.04 |