获取一个指针所指向内存空间的长度

2016-10-14  本文已影响449人  crossover_9324
template <class T>
int GetNewBufferSize(T *p)
{   //获取一个指针所指向内存空间的长度
    if (p)
        return *(int*)((char *)p - 16) / sizeof(*p);
    else
        return 0;
}

例如获取一个动态二维数组的长度

    float **temPix;
    temPix = (float**)malloc(3* sizeof(float*));
    for (int i = 0; i < 3; i++)
        temPix[i] = (float*)malloc(4 * sizeof(float));
//-----------------------------------------
GetNewBufferSize(temPix)=3;
GetNewBufferSize(temPix[0])=4;

(int)((char *)p-16) 原理就是, 当动态分配时,会在分配的指针地址前16字节,保存一个数来记录分配的大小.... debug下为16字节,但是release 下不知道是多少字节

上一篇下一篇

猜你喜欢

热点阅读