일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 자바문자열구분
- 컴파일시스템
- 자바스크립트
- 단국대학교 k-mooc
- 티스토리챌린지
- html기초
- K-MOOC
- stringreader
- CSS 기초
- biginteger사용법
- 블록체인
- 블록체인강의
- 오블완
- Entity
- 2차원배열정렬
- 블록체인 강의
- StringTokenizer
- national instruments
- 머신러닝
- attribute
- K-MOOC 단국대학교 홍보단
- 자바입력받기
- 해시
- Node
- 혁신의기술2:신뢰의미래 블록체인을 만나다
- 딥러닝
- 디스크블록할당
- StringBuilder
- 시스템프로그래밍
- 우선순위큐
- Today
- Total
열정 실천
C언어 메모리 동적 할당 본문
메모리 동적 할당이란??
정적 메모리 : 프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리를 할당하는 기법
(Static Allocation)
동적 메모리 : 프로그램이 실행 중에 필요한 만큼 메모리를 할당하는 기법
(Dynamic Allocation) - 힙 영역에 할당
동적 메모리 할당하기
메모리 동적 할당을 하는 방법은 Malloc, Calloc Relloc 이렇게 3가지가 있다.
우선 이 함수를 사용하려면 stdlib.h 헤더파일(표준 라이브러리 함수 정의)을 추가해야한다.
Malloc
malloc 은 인자로 전달된 값에 해달하는 크기의 메모리 공간을 힙 영역에 할당하고, 이 공간의 주소값을 반환한다.
- 함수 원형 -
void* malloc(size_t size);
malloc 함수의 반환형은 void이기 때문에 반환값을 변형시키지 않으면 메모리 공간에 접근이 불가능하다.
그래서 int형 데이터를 동적 할당 할 때에는 아래와 같이 선언해준다.
- int형 데이터 저장 -
int *arr = (int *)malloc(sizeOf(int));
Calloc
Calloc은 할당된 메모리를 전부 0으로 초기화 한다.
- 함수 원형 - * 크기의 변수를 size개 만큼 저장할 수 있는 메모리 공간
void *calloc(size_t n, size_t size)
- int 형 데이터 저장 -
int *arr=(int*)calloc(n,sizeof(int));
Realloc
Realloc은 할당된 메모리를 다시 할당할 때 쓰인다. 값은 그대로 유지되고 공간의 크기만 바꾼다.
- 함수 원형 - * memblock : 이미 할당한 포인터 변수 / size : 바꾸고 싶은 공간의 크기
void* realloc(void* memblock, size_t size);
- 사용 예 -
realloc(arr, sizeof(int)*10);
메모리 해제하기
할당된 메모리는 반드시 free 함수를 통해 메모리를 해제해야한다.
그렇지 않으면 더 이상 사용하지 않는 메모리가 메모리 누수가 발생하기 때문이다.
- 함수 원형 -
void free (void* arr);
- 사용 예-
free(arr)
위에서 배운 malloc, calloc, realloc,free 를 사용하여 메모리를 할당하고 해제하는 예시.
int size;
scanf("%d", &size); //크기 입력받기
int* arr = (int*)malloc(sizeof(int) * size); //malloc을 이용하여 메모리 동적 할당
int* arr2 = (int*)calloc(size, sizeof(int)); //calloc을 이용하여 메모리 동적 할당 (초기화 : 0)
realloc(arr, sizeof(int)*10); // arr을 메모리 40 바이트로 재 할당
free(arr); // 메모리 해제
free(arr2); // 메모리 해제
'CS > DATA STRUCTURE' 카테고리의 다른 글
[자료구조] 힙 Heap _ 최대 힙, 최소 힙 (구현 with JAVA) (4) | 2024.10.08 |
---|---|
[JAVA] Hash 자료구조 / 자바에서 Hashmap 사용하기 (0) | 2024.09.04 |
[자료구조] 알고리즘 성능 분석 - 시간복잡도, 공간복잡도, 빅오표기법 (0) | 2022.06.30 |
[자료구조] 추상자료형 (0) | 2022.06.29 |
[자료구조] 시작하기 - 자료구조란? 자료구조의 분류 (0) | 2022.06.29 |