동적 메모리 할당, 정적 메모리 할당
- 프로그래밍/C언어
- 2020. 9. 10.
250x250
동적 메모리 할당, 정적 메모리 할당.
안녕하세요.
오늘은 그냥 복습하면서 대충 적어본 내용입니다.
어차피 찾아보면 많은 내용들이 나와서 자세히는 쓰지는 않고 간단하게 작성할 생각입니다.
- 정적 메모리 할당이란?
- 간단한 정적 메모리 할당 코드.
- 동적 메모리 할당이란?
- 간단한 코드.
프로그래밍에서 메모리를 할당하는 방식은 크게 두 가지가 있습니다.
이번 글에서는 두가지 메모리 할당 방법에 대한 간단한 설명과 예시를 다룰 것입니다.
정적 메모리 할당이란?
프로그램이 실행될 때 이미 메모리의 크기가 결정되고 프로그램이 종료되면 운영체제가 알아서 회수함.
할당된 메모리는 스택에 위치하며 처음 결정된 크기보다 더 큰 입력이 들어오면 처리하지 못함.
변수, 배열선언이 정적 메모리 할당에 해당함.
정적 메모리 할당 코드.
흔히 사용하는 변수, 배열 선언.(하드코딩.)
#include<stdio.h>
int main(){
int i=0;
float j=0;
int k[10]={0,};
return 0;
}
동적 메모리 할당이란?
실행시간 동안 사용할 메모리 공간을 할당받으며 사용이 끝나면 반납해야함.
(사용자가 해제하기 전까지 메모리 공간 유지)
할당된 메모리는 힙 영역에 위치하며 상황에 따라 원하는 만큼의 메모리가 할당됨.(할당된 메모리도 크기 조절이 가능함.)
동적 메모리 할당이란?
동적 할당을 하기 위해서는 해당 라이브러리가 필요함.(c기준.)
#include<stdlib.h>
동적 메모리 할당 코드.
void *malloc(size_t size);
void *calloc(size_t num,size_t size);
void *realloc(void *ptr,size_t size);
void free(void *ptr);
malloc()-> size바이트만큼의 메모리를 힙에서 할당합니다.(초기화되지 않으며 할당 실패 시 NULL반환.)
calloc()->num개의 메모리를 할당.(0으로 초기화되며 할당 실패시 NULL반환.)
realloc()-> 할당된 메모리의 크기를 변경.
free()->할당된 메모리를 해제.(사용자가 해제하기 전까지 메모리 공간을 유지하므로 꼭 해제해야함.)
#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
int main(){
/*이런식으로 사용함.*/
int *i=(int *)malloc(sizeof(int)*70);
printf("i=%d\n",_msize(i));
int *j=(int *)calloc(3,sizeof(int));
printf("j=%d\n",_msize(j));
i=realloc(i,sizeof(int)*10);
printf("i=%d\n",_msize(i));
free(i);
free(j);
return 0;
}
위 코드 실행결과.