한번 할당된 메모리 공간은 그 크기를 확장할 수 없다. 이는 모든 영역의 메모리 공간에 해당하는 말이다. 

하지만, 그 영역이 힙이라면, 그리고 realloc 함수를 사용한다면 이러한 일이 가능해진다.


realloc 함수 원형

#include <stdlib.h>

void* realloc(void* ptr, size_t size);

- 성공 시 새로 할당된 메모리의 주소 값, 실패 시 NULL 반환.


첫 번째 전달인자로 확장하고자 하는 힙 메모리의 시작 주소 값을 전달한다.

두 번째 전달인자로 확장하고자 하는 메모리의 전체 크기를 전달한다.


※ realloc 함수는 필요에 따라서 요구하는 크기의 메모리 공간을 별도로 할당하여, 기존 메모리 공간에 저장된 값을 복사하기도 한다. 때문에 메모리의 주소 값을 반환하는 것이다. 


다음 예제는 이 사실을 증명해 보이고 있다.




calloc 함수로 할당된, 그리고 realloc 함수로 확장된 메모리의 주소 값이 다르다. 이를 통해서 realloc 함수가 별도의 메모리 공간을 할당했다는 사실을 알 수 있다.

그리고, realloc 함수가 기존 메모리 공간에 저장된 값을 복사한다는 사실을 입증한다.


※ realloc 함수는 메모리 공간을 축소하는 역할로도 사용할 수 있다.


: 필요하다면 메모리 공간을 축소하는 용도로도 사용이 가능하다. realloc 함수 호출 시 두 번째 인자로 전달하는 메모리 공간의 크기 정보를 기존 메모리 공간의 크기보다 작은 값으로 전달하면, 메모리 공간은 그 크기에 맞춰서 축소가 된다.

그리고 이때에는 새로이 메모리 공간을 할당하지 않고 기존에 할당된 메모리 공간의 크기를 줄이기만 한다.

'Programming > C' 카테고리의 다른 글

volatile 과 restict  (0) 2013.02.15
const 키워드  (0) 2013.02.15
typedef 를 이용한 이차원 배열 주소 값 반환  (0) 2013.02.15
Bit Mask (비트 마스크)  (0) 2013.02.15
비트 쉬프트 연산자  (0) 2013.02.15
Posted by scii
: