
이번에 C언어에서 배울 내용은 메모리 영역부터 동적 배열, 구조체
이번 파트는 실습보다는 이론위주로 진행했다. 그럼 배운 내용을 정리해보겠다.

C언어의 메모리영역은 크게 Kernel 부분과 User 부분으로 나뉜다. 우리가 지금 집중해야 되는건 User
User의 메모리 공간은 4가지로 나눌 수 있다.
Code: 실행할 코드가 저장
Date: 전역변수/정적변수/구조체 저장
Heap: 동적배열이고 Run-Time에 할당되는 영역
Stack: 임시 영역, 지역변수, 매개변수 저장

메모리영역의 크기 구분 시점은 다음과 같다
compile 시 (디스크 저장): Code, Data
compile 시 (디스크 저장 x): Stack
compile 시 (디스크 저장 x): Heap
메모리 할당 방향은 다음과 같은 방향으로 진행된다
Heap: Low -> High
Stack: High -> Low

Heap과 Stack의 차이점에 대한 비교이다.
각각의 특징들을 살펴보자면 Heap은 범용,동적, 할당/해제가 수동, 속도 느림, 유동적이라는 특징이 있고
그에 반해 stack은 프로그램마다 별도, 정적, 할당/해제가 자동, 속도 빠름, 유동적이지 않음이라는 특징을
가지고 있다.

다음으로 정적배열과 동적배열이다. 동적배열이란 프로그램 실행 중에 크기가 변할 수 있는 배열로 C언어가 기본적으로 제공하는 정적 배열과 반대되는 개념이다.
정적 배열은 선언 시점에 크기가 고정되며, 프로그램 실행 도중에는 그 크기를 변경할 수 없다.
반면, 동적 배열은 프로그램 실행 중에 메모리 할당 및 해제를 통해 배열의 크기를 조정할 수 있다.



C언어에서 동적 배열을 구현하기 위해서는 동적 메모리 할당(dynamic memory allocation) 함수인 malloc, calloc, realloc, 그리고 free를 사용한다. 이 함수들은 <stdlib.h> 헤더 파일에 정의되어 있다. 자세한 설명은 동적 배열 설명파트에서 나온다.
- malloc(size_t size): 요청된 크기(size)의 메모리 블록을 할당하고, 할당된 메모리의 주소를 반환
- calloc(size_t num, size_t size): num개의 요소 각각 크기가 size인 메모리 블록을 할당하고, 모든 비트를 0으로 초기화한 후 할당된 메모리의 주소를 반환
- realloc(void *ptr, size_t size): 이미 할당된 메모리 블록의 크기를 새로운 크기(size)로 조정
- free(void *ptr): 동적으로 할당된 메모리 블록을 해제

C언어에서 구조체는 여러 가지 다른 데이터 타입을 하나의 단위로 묶을 수 있는 복합 데이터 타입이다. 구조체를 사용하면 관련된 데이터를 그룹화하여 보다 체계적이고 의미 있는 방식으로 관리할 수 있다. 이는 데이터를 조직화하고, 코드의 가독성을 높이며, 유지 보수를 용이하게 만드는 데 도움이 된다.
구조체의 선언은 struct 키워드를 사용하여 이루어지며, 구조체 내에는 다양한 데이터 타입의 변수들(이를 필드라고 함)이 포함될 수 있다.
여끼까지 오늘의 공부 끝. 완강까지 달려보자