-
(C언어) 12. 동적할당C언어 문서화 2016. 4. 6. 03:13반응형
[포인터 - 동적할당]
동적 할당이 필요한 이유1 : 메모리 상에서 너무 많은 값을 낭비할 때
동적 할당이 필요한 이유2 : 메모리가 너무 작아서 전체의 값을 담을 수 없을때
행정구역 :
data - 초기화된 변수
bss - 초기화 안된 전역변수 = 0으로 초기화됨
stack - 지역변수, 함수가 호출되고 반환될때
heap - 동적할당된 변수
txt
동적할당된 변수는 말에 나온 대로 heap애 저장된다.
<동적할당을 하기 위해 필요한 것>(#include <stdlib.h>)
1. malloc
엠얼록, 또는 멀록, 또는 말록, 또는... 읽는 방법은 다양하다.
쓰는 방법 : 동적할당을 하고 싶을 때(그 할당한 값들이 0으로 초기화 안되있어도 상관없을때)
type *[포인터변수명]=malloc[type_size];
이때 malloc은 메모리 할당만 해주는 것이기 때문에 리턴값은 void 포인터 이다.
이것 때문에 아래 예시의 5번 줄에서 malloc앞에 (int *)을 해줌으로써 할당한 메모리 안에 정수형 데이터가 들어간다는 것을 컴퓨터에 알려준다.
인자로 type_size를 받은 다음, 그 type_size만큼의 메모리를 할당한다.
그리고 그 할당한 메모리의 주로를 포인터변수명에 넣어준다.
⚇예시
123456789101112131415#include <stdio.h>#include <stdlib.h>int main(){int *arr=(int *)malloc(sizeof(int)*4);// int *arr=(int *)malloc(16); 과 같은뜻이다.int i;for(i=0; i<4; ++i){arr[i]=i;}for(i=0; i<4; ++i){printf("%d", arr[i]);}free(arr);return 0;}cs 2. calloc
씨얼록, 또는 칼록, 또는 컬록이라고 읽는 이 calloc함수는 할당한 메모리의 값들을 0으로 초기화 시켜주는 역할을 한다.
type *[포인터변수명]=calloc[size_t num, size_t size];
이때 malloc과 같이 리턴값은 void 포인터이다.
첫번째 인자 size_t num은 동적할당할 배열의 개수라고 이해하면 편하다.
두번째 인자 size_t size는 동적할당할 배열의 자료형 사이즈라고 이해하면 편하다.(sizeof()연산자를 이용하자.)
⚇예시
123456789101112131415#include <stdio.h>#include <stdlib.h>int main(){int *arr=(int *)calloc(4,sizeof(int));// int *arr=(int *)calloc(4,4); 와 같은뜻이다.int i;for(i=0; i<4; ++i){arr[i]=i;}for(i=0; i<4; ++i){printf("%d", arr[i]);}free(arr);return 0;}cs 이 예시는 malloc의 예시와 비슷하다. 차이점은 arr[0]~arr[3]까지의 값들이 0으로 초기화되어있다는 것이다.
3. realloc
리얼록이라고 읽는 이 realloc함수는 이미 동적할당한 공간의 크기를 바꿔주는 함수이다.
realloc[void *memblock, size_t size];
첫번째 인자 void *memblock은 그냥 크기를 바꾸고싶은 배열명이라고 이해하면 된다.
두번째 인자 size_t size는 바꾸고 싶은 배열의 사이즈를 넣으면 된다.
⚇예시
12345678910111213141516171819#include <stdio.h>#include <stdlib.h>int main(){int *arr=(int *)malloc(sizeof(int)*10);int i;for(i=0; i<10; ++i){arr[i]=i;}realloc(arr,20);for(i=10; i<20; ++i){arr[i]=i;}for(i=0; i<20; ++i){printf("%d", arr[i]);}free(arr);return 0;}cs 4. free
항상 동적할당이 끝나면 free([동적할당한변수명]); 을 해주어야 한다.
이유는 메모리 할당이 끝났으니 다음을 위해 메모리를 비워놓고 가는 것이다.(필자는 동적할당을 풀어준다(free)의 개념으로 이해했다.)
반응형'C언어 문서화' 카테고리의 다른 글
(C언어)14.링크드리스트(연결리스트) (2) 2016.05.08 (C언어)13.구조체 (0) 2016.04.27 (C언어) 11. 문자열(심화) (0) 2016.04.06 (C언어) 10. 포인터_1 (0) 2016.03.28 (C언어) 9. 다차원 배열 (0) 2016.03.27