1. 정적 할당과 동적 할당
프로그램에서 값을 저장하기 위해 필요한 기억 장소를 확보하는 것을 메모리 할당이라고 한다. 여기서 할당을 해주는 방식에 따라 정적(static) 메모리 할당과 동적(dynamic) 메모리 할당으로 구분한다. 간단하게 정적 할당과 동적 할당으로 구분한다.
1) 정적 할당
프로그램에 필요한 기억 장소를 확보하기 위해 지금까지 사용한 방식은 변수를 선언하는 것이었다. 자료형에 따라 메모리 크기가 정해지고, 이때 정해진 메모리 크기는 프로그램을 실행할 때마다 변하지 않는다. 정리해서 코드를 작성할 때 자료형에 따라 메모리 크기가 할당되고 프로그램 실행할 때마다 변하지 않는 방식을 정적 할당이라고 한다.
이러한 정적 할당에는 몇가지 문제점이 있다. 정적 할당을 사용할 땐 프로그램을 작성하는 단계에서 필요한 메모리 크기를 알아야 한다. 크기를 정확히 알 수 없을 경우에는 충분히 큰 크기를 가정하여 선언을 한다. 이때 임의로 정한 메모리 크기보다 적은 메모리를 사용하게 되면 메모리 공간은 사용되지 않고 낭비된다. 반대로 만약 임의로 정한 메모리 크기보다 많은 메모리를 사용해야 된다면 다시 코드를 수정해야 되는 일이 발생한다. 결론적으로 메모리를 효율적으로 사용하기 어렵고, 프로그램이 정삭적으로 실행되지 못하는 경우도 많다.
2) 동적 할당
위의 정적 할당의 문제를 해결하기 위해 프로그램 작성 단계가 아닌 프로그램 실행 단계에서 결정되는 크기에 따라 메모리를 할당해주는 방식을 동적 할당이라고 한다. 동적할당은 상황에 따라 필요한 만큼의 메모리를 할당받을 수 있어 유연한 프로그램을 작성하는 것이 가능하다.
2. 동적 메모리 사용 절차
메모리를 사용하기 위해서는 메모리를 할당하고 해제하는 과정이 필요하다. 정적 할당에서는 프로그램 작성 단계에서 미리 정해 놓은 크기만큼 메모리를 할당하기 때문에 메모리 할당과 해제를 특별히 신경 쓰지 않아도 된다. 하지만 동적 할당에서는 직접 메모리를 할당하고 해제하는 과정을 코드로 직접 작성해야 한다. 그러기 위해서 먼저 할당과 해제하는 함수가 포함된 stdlib.h 헤더 파일을 포함해야한다. 동적 메모리를 사용하는 절차는 총 3단계로 나눠진다.
1) 동적 메모리 할당 - malloc( ) 함수
먼저 malloc 함수를 이용하여 메모리를 할당받는다. malloc 함수는 메모리 할당( memory allocation )을 하는 함수이다. 인자로 할당할 메모리의 크기가 byte 단위로 주어지는데, 보통 sizeof( ) 연산자가 사용된다. malloc( )는 할당된 메모리의 시작 주소를 반환하는데, 할당된 메모리가 어떤 자료형으로 사용될지 모르기 때문에 void * 형으로 반환된다.
함수 원형 | void* malloc( unsigned int size ) ; |
함수 인자 |
할당 받을 메모리의 크기 (byte 단위) 보통 sizeof( ) 연산자를 활용한다. |
반환 값 |
변환 값의 자료형 : void 포인터 할당 받은 메모리의 시작 주소를 반환 메모리 할당에 실패한 경우에는 NULL을 반환 |
예를 들어 정수 4개를 저장하기 위해 공간을 할당받으려면 malloc( 4*sizeof(int) ).
이때 4 * sizeof( int ) = 16 이므로, 총 16 bytes 할당받는다.
2번부터는 다음 게시물에 이어서 올릴게요!!
'프로그래밍 > C 언어' 카테고리의 다른 글
동적 할당 ( 3. 기타 동적 메모리 할당 함수 ) (0) | 2020.04.13 |
---|---|
동적 할당 ( 2. 동적 메모리 사용 및 해제 ) (0) | 2020.04.13 |
문자와 문자열 ( 2. 문자열의 배열 및 처리 함수) (0) | 2020.03.13 |
문자와 문자열 ( 1. 문자열이란? ) (0) | 2020.03.09 |
포인터 ( 4. 함수와 포인터 ) (0) | 2020.03.02 |