오늘 제가 배운 내용은 동적 메모리입니다.
C++에서 새로운 키워드인 new&delete를 공부하려고 보니 C언어의 malloc&free가 기억이 안나서
다시 공부했습니다..
프로그램이 메모리를 할당 받는 방식은 두 가지의 방법이 있습니다.
우선 우리가 C언어를 계속 공부하면서 자연스럽게 사용하던 정적 할당입니다. 예로 int나 double을 사용하면 4바이트 또는 8바이트를 할당 받는다는 것을
여러분은 알고 계실껍니다. 그렇다면 이러한 정적 할당이 뭐가 문제여서 동적 할당이 등장했냐고 물어보시면
정적 할당의 단점은 프로그램 실행 전에 먼저 정해진 메모리를 할당 받는게 문제입니다. 작은 메모리라면 별 신경 안쓰셔도 되겠지만
프로그램이 커지면 커질 수록 낭비되는 메모리도 많을 것이고 초과하는 메모리도 있을껍니다. 그래서 이러한 문제점을 극복하려 등장한게
동적 할당 입니다.~
동적 할당은 프로그램 실행 중 필요한 만큼의 메모리를 할당하는 방법으로 사용 후에는 다시 반납하는 방식입니다.
또한 동적 할당은 정적 할당처럼 사용할 수 있다는 특징이 있습니다. 이러한 특징들을 봤을 때 동적 할당은 효율적이다는 생각이 드실껍니다.
그렇다면 어떻게 사용되는지 배워보겠습니다.
우선 함수 키워드는 malloc과 free가 있습니다.
void *malloc(size_t size); = 반환형 void는 사용자가 알맞게 원하는 타입으로 바꿔주셔야 합니다. 또한 옆의 괄호 안에는 사이즈가 들어가게 됩니다.
ex) int *p, p = (int *)malloc(500) // 500바이트 할당입니다.
그런데 이러한 모습은 우리가 봐오던 malloc과는 좀 거리가 있습니다.
바이트를 할당하기보다는 알맞는 타입의 갯수로 할당을 받는게 일반적이며 주로 사용할 때는 배열로 쓰는게 일반적입니다.
ex) int *score , score = (int *)malloc(100*sizeof(int)); 이러면 정수형*100개가 되는 겁니다.
int 뿐만이 아니라 구조체도 넣을 수 있습니다. 또한 사용할 때 항상 반환값이 NULL 값인지 확인해야 합니다. 메모리가 부족하면
NULL값을 반환하기 때문에 올바르게 할당되었는지의 확인 절차가 필요합니다.
할당을 해봤으니 이제 반납을 하겠습니다.
반납을 하면 그 함수는 다시 쓸 수 없으며 반드시 반환 포인터로 반환 해야합니다.
즉 p = (int *)malloc(500); 이면 free(p);로 반납해야 합니다.
뿐만 아니라 동적 할당에는 malloc함수만 있는게 아닙니다. 그외로
calloc()함수나 realloc()함수가 존재합니다. 동적 할당 함수들은 stdlib.h에 있으니 직접 확인하시는 것도 나쁘지 않습니다.
아주 간단하게 동적 할당과 malloc&free함수에 대해서 공부했습니다.
'알음알음-IT > 개발_기초_코딩_C' 카테고리의 다른 글
초급 C언어 공부 - 4.구조체(1) (0) | 2020.02.04 |
---|---|
초급 C언어 공부 - 3.포인터(1) (0) | 2020.02.04 |
초급 C언어 공부 - 2.매크로 함수 (0) | 2020.02.04 |
초급 C언어 공부 - 1.함수 (0) | 2020.02.04 |