如何获取由函数“malloc”锁定的内存段指针的大小 [重复]
Posted
技术标签:
【中文标题】如何获取由函数“malloc”锁定的内存段指针的大小 [重复]【英文标题】:How can I get the size of a pointer of a segment of memory, mallocked by function "malloc" [duplicate] 【发布时间】:2011-05-17 02:55:00 【问题描述】:可能的重复:How can I get the size of an array from a pointer in C?Any tool to find size of memory allocated dynamically using malloc/realloc?
如果只给定一个指针,我怎样才能得到一个内存段指针的大小,malloc被函数malloc锁定 /p>
???
【问题讨论】:
没有便携的方法。 为什么需要它?如果您说出原因,那么 SO 的人可能会为您提出解决方案。 许多重复...搜索...***.com/questions/2373749/…...***.com/questions/3886539/…...***.com/questions/2478240/… -1 发布前不搜索。 @Nyan:我也怀疑 Macroideal 没有搜索,但你不能确定。你会注意到我找到的重复的标题有多么不同。 【参考方案1】:这是一个例子:
typedef struct _BlockHeader
int Size;
BlockHeader;
void *MyMalloc(int size)
char *ptr = malloc(size + sizeof(BlockHeader));
BlockHeader *hdr = (BlockHeader*)ptr;
hdr->Size = size;
return (ptr + sizeof(BlockHeader));
void MyFree(void *ptr)
char *myptr = (char*)ptr;
free(myptr - sizeof(BlockHeader));
int GetPtrMallocedSize(void *ptr)
char *myptr = (char*)ptr;
BlockHeader *hdr = myptr - sizeof(BlockHeader);
return (hdr->size);
实际上,每个内存块都以标头开头,收集内存块信息。当然 realloc 和 calloc 也应该实现,但是内存块不能被其他期望“正常” malloced 内存的软件使用。
另一种方法是对指针进行哈希处理,并通过挂钩 malloc/free 函数来收集内存信息。
我知道 MS CRT 使用它来跟踪堆溢出和内存泄漏。不知道有没有什么副作用……其实我没用过。
【讨论】:
【参考方案2】:您不能,至少在不知道malloc
的实现版本的内部结构以及分配块的数据结构的情况下是这样的。
【讨论】:
【参考方案3】:你不能。由于您首先分配了内存,因此您有责任跟踪分配的内容和数量。
【讨论】:
【参考方案4】:你用sizeof(p).
得到指针p的大小
如果您询问用于完成 malloc 调用的内存块的大小,这可能是特定于版本的。
【讨论】:
【参考方案5】:这没有标准,所以它的实现是特定的。但是,在 Windows 上,您可以使用 _msize
。
【讨论】:
以上是关于如何获取由函数“malloc”锁定的内存段指针的大小 [重复]的主要内容,如果未能解决你的问题,请参考以下文章