_msize_dbg
计算内存块的大小堆上 (请只调试版本)。
size_t _msize_dbg(
void *userData,
int blockType
);
参数
userData
给的指针为其内存块确定大小。块类型
指定的内存块类型: _CLIENT_BLOCK 或 _NORMAL_BLOCK。
返回值
在成功完成, _msize_dbg 返回大小 (以字节为单位) 的指定内存块;否则返回 NULL。
备注
_msize_dbg 是 _msize 函数的 " debug " 版本。当 _DEBUG 未定义时,每个调用 _msize_dbg 减少到 _msize的调用。_msize 和 _msize_dbg 在基堆计算的大小内存块,但是, _msize_dbg 添加两个调试功能:它包括缓冲区的部分在返回的范围内存块的用户一侧,它允许将特定的大小计算块类型。
有关如何的信息存储在基堆的调试版本中分配,初始化,并管理,请参见 内存管理和调试堆。有关分配的信息块类型以及如何使用它们,请参见 调试堆上的块类型。有关调用标准堆函数之间的差异的信息及其调试在应用程序的调试版本的版本,请参见 使用调试版本与基版本。
此功能验证其参数。如果 memblock 是 null 指针, _msize 调用无效参数处理程序,如 参数验证所述。如果错误进行处理,函数用于设置 errno 到 EINVAL 并返回 -1。
要求
实例 |
必需的头 |
---|---|
_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 );
}
Output
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。