_expand

更改的范围内存块。

void *_expand( 
   void *memblock,
   size_t size 
);

参数

  • memblock
    对以前指定的指针内存块。

  • size
    新的大小 (以字节为单位)。

返回值

_expand 返回无效指针重新分配的内存块。_expand不同, realloc,不能将阻止更改其大小。因此,因此,如果有足够的内存扩展块,而不移动它,对 _expand 的 memblock 参数是作为返回值的相同。

,当错误在其操作时,检测_expand 返回 NULL 。例如,因此,如果 _expand 用于减少内存块,则可能检测到小的块堆损坏或无效的指针并返回 NULL。

如果有可用内存不足展开块到给定范围,而不移动它,则函数返回 NULL。_expand 从不返回块展开为大小小于请求。如果失败, errno 指示失败的性质。有关 errno的更多信息,请参见errno、_doserrno、_sys_errlist和_sys_nerr

返回值指向确保为任何类型的对象存储正确对齐的存储空间。签出该项的新范围,请使用 _msize。获取对一个类型的指针 void除了之外,将使用一个返回值的类型转换。

备注

此前分配大小。尝试展开或收缩块内存块,而不移动其堆位置的 _expand 函数。memblock 参数指向块的开头。size 参数指定块的新范围,以字节为单位)。块的内容保持不变的最短新值和旧范围。memblock 不能将释放的块。

说明说明

在 64 位平台上, _expand 可能不会阻止,如果新的大小与当前范围小于;特别是,因此,如果块小于 16K 的大小并在低碎片堆中分配了, _expand 块保持不变并返回 memblock。

当应用程序使用 C 运行库时的调试版本链接, _expand 解析为 _expand_dbg。有关堆方式的更多信息管理在调试过程中,请参见 CRT 调试堆

此功能验证其参数。如果 memblock 是 null 指针,此函数调用无效参数处理程序,如 参数验证所述。如果执行允许继续, errno 设置为 EINVAL ,函数返回 NULL。如果 size 比 _HEAP_MAXREQ大, errno 设置为 ENOMEM ,函数返回 NULL。

要求

功能

必需的头

_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 );
}
  

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

内存分配

calloc

free

malloc

_msize

realloc