힙에 할당된 메모리의 확장 시 호출하는 realloc 함수.
Programming/C 2013. 2. 15. 02:35 |한번 할당된 메모리 공간은 그 크기를 확장할 수 없다. 이는 모든 영역의 메모리 공간에 해당하는 말이다.
하지만, 그 영역이 힙이라면, 그리고 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 |