C언어기초

나혼자C언어-메모리의 구조

bumpang0629 2022. 3. 23. 17:11

메모리는 크게 코드영역, 스택영역, 힙영역, 데이터영역 총 4가지로 구분된다.

 

코드 영역 -> 실행 명령어들 저장

스택 영역 -> 지역변수 및 매개변수 저장

힙 영역 -> 프로그래머가 직접할당

데이터영역 -> 전역변수, static 변수 저장

 

 

동적으로 메모리를 할당하는 이유

 

일반 변수 선언 형태

 

사용자가 가변적인 데이터에 메모리값을 적용하고 싶을때, 낭비를 최소화 하기위해서 쓴다.

 

동적메모리 할당

 

void* malloc (size_t size)

 

-엠멀록 또는 말록이라고 읽는다.

-전달인자 sizr는 바이트 단위로 입력

-메모리 할당이 되면 메모리의 주소값을 리턴

-메모리부족시NULL 포인터 리턴

-리턴형이 void* 인데, 타입이 지정되어 있지 않는 포인터를 리턴

(난 당신이 원하는 메모리 크기만큼 할당해줄테니, 메모리는 당신이 원하는 형태로 정해서 사용하세요.)

 

중요

빚을 졌으면 일정기간뒤에 상환을 해야 하듯이 동적메모리도 마찬가지다. 

동적 메모리는 사용한 다음 반드시 해제해주어야한다.

-> 메모리 누수가 발생한다. (메모리 누수가 지속되면 시스템이 다운된다.)

void free(void* memblock);

전달인자로 메모리를 가리키는 포인터를 대입한다.

 

입력받는 학생수에 따라 동적메모리 할당
5를 입력했을때 메모리는 20이 할당된다.

 

 

 

포인터와 배열

 

배열의 이름 == 포인터

배열을 포인터처럼 사용할 수 있다.

arr + i => 주소값을 기준으로 배열안에 요소에서 계산한다.

 

메모리 재할당 

실시간 메모리를 할당하여 사용한다고 해도 사용중에 메모리 크기를 늘려야하는 경우가 발생할 수 있다.

malloc 함수로 할당된 메모리를 다시 

 

pm = malloc(100);

pm의 최대 메모리값이 100일때 50이 더 필요하게됐다면

 

realloc(pm,150);

pm의 최대 메모리값을 150으로 재할당해준다.

 

메모리를 재할당해줘도 이전데이터는 그대로 남아있다.

 

 

 

 

 

'C언어기초' 카테고리의 다른 글

나혼자C언어 - 전처리  (0) 2022.03.28
나혼자C언어 - 구조체  (0) 2022.03.28
나혼자C언어 - 포인터  (0) 2022.03.23
나혼자 C언어 - 지역변수와 전역변수  (0) 2022.03.18
나혼자 C언어 - 함수  (0) 2022.03.18