0w0
동적 메모리 할당 malloc realloc 본문
동적 메모리 할당
메모리를 할당하는 함수로는 malloc, calloc, realloc 등이 있고, 사용을 마친 메모리를 해제하는 함수로는 free가 있음
동적 메모리 할당을 활용하면 필요한 데이터양에 따라 메모리 공간을 효율적으로 사용할 수 있다.
메모리 할당 : malloc
#include<stdlib.h>
void malloc(size_t size) //size:할당받을 메모리 크기
-메모리 할당
성공-> 메모리의 시작 주소를 리턴
실패-> NULL 포인터를 리턴
-인자로 지정하는 메모리 크기는 바이트 단위
-할당된 메모리에는 데이터형 제한 없음
-주의사항: malloc 함수는 할당된 메모리를 초기화하지 않음
ex)
char *ptr;
ptr=malloc(sizeof(char) *100);
메모리 할당과 초기화 : calloc
#include<stdlib.h>
void *calloc(size_t nelem, size_t elsize); //nelem:배열 요소의 개수, elsize:각 배열 요소의 크기
-calloc 함수는 nelem X elsize 바이트 배열을 저장할 메모리를 할당한다.
-calloc 함수는 할당된 메모리를 0으로 초기화
ex) 길이가 20바이트인 요소 10개로 구성된 배열을 저장할 수 있는 메모리를 할당하는 예
char *ptr;
ptr=calloc(10,20);
메모리 추가 할당 : realloc
#include<stdlib.h>
void *realloc(void *ptr, size_t size); //ptr:할당받은 메모리를 가리키는 포인터, size:할당할 메모리의 크기
-realloc 함수는 이미 할당받은 메모리에 추가로 메모리를 할당할 때 사용
-realloc 함수는 이전에 할당받는 메모리와 추가할 메모리를 합한 크기의 메모리를 새롭게 할당하고 주소를 리턴
-메모리의 내용을 새로 할당된 메모리로 복사
ex) malloc으로 할당받은 메모리에 추가로 100바이트 메모리를 할당하는 예로, 새로운 메모리의 주소는 new 포인터에 저장된다.
realloc 함수로 메모리를 새로 할당받으면 이전 메모리의 주소는 필요없음
char *ptr, *new;
ptr=malloc(sizeof(char) *100);
new=realloc(ptr, 100);
메모리 해제 : free
#include<stdlib.h>
void free(void *ptr); //ptr:해제할 메모리의 주소
-free 함수는 사용을 마친 메모리를 해제하고 반납한다. free 함수가 성공하면 ptr이 가리키던 메모리는 더 이상 의미가 없음
'Coding > System Programming' 카테고리의 다른 글
저수준 파일 입출력 (0) | 2016.10.06 |
---|---|
명령행 인자 출력 ex1_6.c ex1_7.c (0) | 2016.09.28 |
오류 처리 함수 perror함수, str-error함수 (0) | 2016.09.27 |
Makefile과 make ex1_3_main.c ex1_3_addnum.c (0) | 2016.09.27 |
시스템 호출? ex1_1.c ex1_2.c (0) | 2016.09.27 |