这里介绍一个不常见到的函数,即:_msize()。其原型为:size_t _msize( void * memblock );
其中返回类型 size_t 是这样定义的:
#define __SIZE_TYPE long unsigned int
typedef __SIZE_TYPE__ size_t;
即size_t实际上是无符号长整型,在32位系统上位32位,在64位系统中位64位。
参数 void * memblock 是一个 void 类型的指针,void * 可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。
一般我们要返回某个类型的数据所占用的内存首先是考虑 sizeof() 和 strlen() 函数,但对于用 new 分配出来的内存来说如:char * pc = new char[10] ; 想返回 pc 所指向的内存的大小,sizeof(pc), 或strlen(pc) 都是得不到所需要结果的,因为 sizeof() 返回的是指针本身所占用内存的大小,strlen() 只能用char*做参数,且必须是以''\0''结尾的。
而_msize() 函数则可以返回用 new 方式分配出来的内存大小。如下所示:
char * pc = new char[10] ;
int n = _msize(pc) / sizeof(char);
最后得到的结果是 n = 10。