Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

zyeon's 작심삼일 코딩 공부

동적할당 malloc() 본문

c++ 정리

동적할당 malloc()

젼뀨 2024. 7. 2. 19:57

정적 메모리 할당

프로그램이 시작 되기 전 미리 정해진 크기의 메모리를 할당 받는다.

프로그램 실행 도중 크기가 변경 될 수 없으며, 메모리 공간이 낭비될 수 있다.

 

동적 메모리 할당

프로그램이 실행 도중에 동적으로 메모리를 할당 받으며, 이는 히프(heap) 메모리 공간에서 할당을 받는다.

메모리를 효율적으로 관리 할 수 있으나 사용 후 메모리를 반납해 줘야한다.


malloc()

malloc 함수는 사용자가 지정한 크기만큼 메모리를 할당 한 후 메모리의 주소를 반환한다.

이 때 주소는 void * 로 반환하여 사용자가 원하는 포인터 타입으로 지정해 사용할 수 있다.

또, 메모리를 할당하는 크기의 단위는 바이트이다.

메모리가 부족할 시에는 NULL을 반환하며, 실행 시간 단축을 위해 초기화를 안한다는 특징을 가지고 있다. 

int *p = (int *)malloc(100*sizeof(int)); // 정수 100개 할당

*p = 10;                                 // 동적 배열의 첫 번 째 공간에 값 대입
*(p+1) = 20;
*(p+2) = 30;

p[3] = 40;                               // 배열과 같이 사용할 수 있음
p[4] = 50;
p[5] = 60;

free(p);                                 // 동적 메모리 해제

위 코드는 malloc 함수를 통해 100개의 정수를 저장할 수 있는 공간을 할당 받고, 할당받은 공간을 사용하는 방식을 나타낸 코드이다.

동적 메모리는 * 연산자용하는 방법이 있고, 배열과 같이 [] 연산자를 사용하는 방법이 있다.

일반적으로 배열처럼 생각하는 방법을 많이 사용한다.

마지막으로, 할당 받은 메모리는 free()를 사용해 메모리를 해제해줘야 한다. 


calloc()

calloc 함수는 0으로 초기화 된 동적 메모리를 할당하고 싶을 때 사용한다. 다만 malloc 함수와는 다르게 바이트 단위가 아닌 항목 단위로 메모리를 할당한다.

int *p = (int *)calloc(10, sizeof(int)); // 0으로 초기화 된 동적 메모리 10*(int형) 만큼 할당

realloc() 

realloc 함수는 할당 된 메모리 블록의 크기 변경할 때 사용한다. 기존의 데이터 값은 유지된다.

int *p = (int *)malloc(10*sizeof(int));
p = realloc(p, 20*sizeof(int));           //메모리 크기 변경 후 재할당

 

'c++ 정리' 카테고리의 다른 글

함수 포인터  (0) 2024.08.19
new delete  (0) 2024.08.09
문자 자료형 wchar_t  (0) 2024.06.28
void 포인터  (0) 2024.06.21
const와 포인터  (0) 2024.06.21