본문 바로가기
Language&Framework&Etc/C++

Malloc 정리

by 머리올리자 2021. 4. 9.

C언어에서 원하는 메모리를 할당받아 사용하는 방법은 아래와 같다.

 

malloc -> 사용 -> free

 

malloc => memory allocation의 약자

 

여기서 필요한 크기는 바이트 단위로 받는다.

 

 

위 동적 할당은 C언어의 경우 아래와 같이 표현할 수 있다.

#include <stdlib.h> // malloc, free 함수 선언 헤더 파일

int main(void)
{
	int* pnum = malloc(sizeof(int)); // 4바이트(int의 크기) 동적 메모리 할당
 	free(pnum) // 동적으로 할당한 메모리 해제
}

malloc을 통해 원하는 메모리 공간의 크기(4바이트)를 할당하였다.

 

원하는 시점에 원하는 만큼 메모리를 할당할 수 있으므로 동적 메모리 할당(dynamic memory allocation)이라고 한다.

 

그렇다면 아래를 봐보자

 

#include <stdlib.h> // malloc, free 함수 선언 헤더 파일

int main(void)
{
	int num = 1
	int* pnum1 = &num
	int* pnum2 = malloc(sizeof(int)); // 4바이트(int의 크기) 동적 메모리 할당
 	
}

pnum1과 pnum2의 차이점은 무엇일까

 

pnum1은 num1 변수의 메모리 주소를 할당했고,

 

pnum2는 malloc 함수로 메모리를 할당하였다.

 

변수스택(stack)에 생성되며,

 

malloc 함수힙(heap) 부분의 메모리를 사용한다.

 

스택과 힙의 차이점은 메모리 해제이다.

 

- 스택 : 변수를 사용한 뒤 따로 처리를 해주지 않아도 된다.

- 힙    : malloc 함수를 사용하여 힙에서 할당한 메모리는 반드시 해제해야 한다.

 

 

동적할당 된 메모리에 값 넣기

#include <stdio.h>
#include <stdlib.h> 

int main(void)
{
	
	int* pnum = malloc(sizeof(int));
	*pnum = 1; // 포인터는 역참조 한 다음 값을 할당한다.

	printf("%d", *pnum); // 포인터를 역참조해서 값을 가져온다.
}

 

메모리에 값을 할당할 때는 *pnum = 값 처럼 포인터를 역참조한 뒤 값을 저장하면 된다.

 

 

 

참고

dojang.io/mod/page/view.php?id=285

 

C 언어 코딩 도장: 35.1 메모리 할당하기

메모리를 사용하려면 malloc 함수로 사용할 메모리 공간을 확보해야 합니다(memory allocation). 이때 필요한 메모리 크기는 바이트 단위로 지정합니다(메모리 할당, 해제 함수는 stdlib.h 헤더 파일에 선

dojang.io

 

'Language&Framework&Etc > C++' 카테고리의 다른 글

C++에서 문자 형태의 숫자를 입력 받았을 때 숫자 형태로 변경하는 방법  (0) 2021.04.11
C++ Vector란  (0) 2021.01.20
템플릿  (0) 2021.01.13
가상함수  (0) 2021.01.12
C++ 상속 예제  (0) 2021.01.10