_expand
메모리 블록의 크기를 변경합니다.
구문
void *_expand(
void *memblock,
size_t size
);
매개 변수
memblock
이전에 할당된 메모리 블록에 대한 포인터입니다.
size
새 크기(바이트)입니다.
반환 값
_expand
는 다시 할당된 메모리 블록에 대한 void 포인터를 반환합니다. _expand
와 달리 realloc
블록을 이동하여 크기를 변경할 수 없습니다. 따라서 블록을 이동 memblock
하지 않고 확장할 수 있는 충분한 메모리가 있는 경우 매개 변수 _expand
는 반환 값과 동일합니다.
작업 중에 오류가 발견될 경우 _expand
는 NULL
을 반환합니다. 예를 들어 _expand
를 사용하여 메모리 블록을 축소할 경우 작은 블록 힙의 손상이나 잘못된 블록 포인터가 발견되고 NULL
이 반환될 수 있습니다.
블록을 이동하지 않고 확장할 수 있는 메모리가 충분하지 않으면 함수가 반환됩니다 NULL
. _expand
는 요청된 것보다 작은 크기로 확장된 블록을 반환하지 않습니다. 오류가 발생할 경우 errno
는 오류의 특성을 나타냅니다. 에 대한 errno
자세한 내용은 , , _doserrno
_sys_errlist
및_sys_nerr
를 참조하세요errno
.
반환 값은 모든 유형의 개체의 스토리지에 적합하게 정렬된 스토리지 공간을 가리킵니다. 항목의 새 크기를 확인하려면 _msize
를 사용합니다. void
가 아닌 형식의 포인터를 가져오려면 반환 값에 형식 캐스팅을 사용합니다.
설명
_expand
함수는 힙 내에서 위치를 이동하지 않고 블록을 확장하거나 축소하여 이전에 할당된 메모리 블록의 크기를 변경합니다. memblock
매개 변수는 블록의 시작 부분을 가리킵니다. size
매개 변수는 블록의 새 크기(바이트)를 제공합니다. 블록의 콘텐츠는 새 크기와 이전 크기 중 더 짧은 크기까지 변경 사항이 없습니다. memblock
해제된 블록이 되어서는 안 됩니다.
참고 항목
64비트 플랫폼에서 새 크기가 현재 크기보다 작을 경우 _expand
는 블록을 축소할 수 없습니다. 특히, 블록 크기가 16K보다 작아 블록이 낮은 조각화 힙에서 할당된 경우 _expand
는 블록을 변경하지 않고 memblock
을 반환합니다.
애플리케이션이 C 런타임 라이브러리 _expand
의 디버그 버전과 연결되면 .로 확인 _expand_dbg
됩니다. 디버깅 프로세스 중에 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙을 참조하세요.
이 함수는 해당 매개 변수의 유효성을 검사합니다. null 포인터인 경우 memblock
이 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우 errno
는 EINVAL
로 설정되고 함수에서 NULL
버전입니다. 보다 큰 경우 size
, errno
로 설정 ENOMEM
되 고 함수가 반환 합니다NULL
._HEAP_MAXREQ
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
요구 사항
함수 | 필수 헤더 |
---|---|
_expand |
<malloc.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
Allocate a 512 element buffer
Allocated 512 bytes at 002C12BC
Expanded block to 1024 bytes at 002C12BC