_msize_dbg
计算堆(仅限调试版本)中内存块的大小。
语法
size_t _msize_dbg(
void *userData,
int blockType
);
参数
userData
指向可确定大小的内存块的指针。
blockType
指定的内存块的类型:_CLIENT_BLOCK
或 _NORMAL_BLOCK
。
返回值
如果成功完成,_msize_dbg
返回指定内存块的大小(以字节为单位);否则返回 NULL
。
注解
_msize_dbg
是 _msize
函数的调试版本。 未定义 _DEBUG
时,每个对 _msize_dbg
的调用都会减少到对 _msize
的调用。 _msize
和 _msize_dbg
都计算基堆中的内存块的大小,但 _msize_dbg
增加了两个个调试功能:它在返回大小的内存块用户部分的任一侧包括缓冲区,并且允许对指定块类型进行大小计算。
若要了解如何在基堆的调试版本中分配、初始化和管理内存块,请参阅 CRT 调试堆详细信息。 若要了解分配块类型及其使用方式,请参阅调试堆上的块类型。 有关标准堆函数与调试版本之间的差异的信息,请参阅堆分配函数的调试版本。
此函数验证其参数。 如果 memblock
为空指针,则 _msize_dbg
将调用无效参数处理程序,如参数验证中所述。 如果处理错误,函数将设置为errno
EINVAL
并返回 -1(18,446,744,073,709,551,615 未签名)。
要求
例程 | 必需的标头 |
---|---|
_msize_dbg |
<crtdbg.h> |
有关兼容性的详细信息,请参阅 兼容性。
库
仅限 C 运行时库的调试版本。
示例
// crt_msize_dbg.c
// compile with: /MTd
/*
* This program allocates a block of memory using _malloc_dbg
* and then calls _msize_dbg to display the size of that block.
* Next, it uses _realloc_dbg to expand the amount of
* memory used by the buffer and then calls _msize_dbg again to
* display the new amount of memory allocated to the buffer.
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>
int main( void )
{
long *buffer, *newbuffer;
size_t size;
/*
* Call _malloc_dbg to include the filename and line number
* of our allocation request in the header
*/
buffer = (long *)_malloc_dbg( 40 * sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
if( buffer == NULL )
exit( 1 );
/*
* Get the size of the buffer by calling _msize_dbg
*/
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );
/*
* Reallocate the buffer using _realloc_dbg and show the new size
*/
newbuffer = _realloc_dbg( buffer, size + (40 * sizeof(long)), _NORMAL_BLOCK, __FILE__, __LINE__ );
if( newbuffer == NULL )
exit( 1 );
buffer = newbuffer;
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _realloc_dbg of 40 more longs: %u\n", size );
free( buffer );
exit( 0 );
}
输出
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320