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
'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 |