美文网首页
获取一个指针所指向内存空间的长度

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

作者: crossover_9324 | 来源:发表于2016-10-14 11:15 被阅读449次
    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 下不知道是多少字节

    相关文章

      网友评论

          本文标题:获取一个指针所指向内存空间的长度

          本文链接:https://www.haomeiwen.com/subject/otvgyttx.html