可能重复:
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 获取内存段指针的大小 mallocked / p>
???
答案 0 :(得分:2)
以下是一个例子:
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使用它来跟踪堆溢出和内存泄漏。我不知道是否有一些副作用......实际上我从未使用它。
答案 1 :(得分:1)
你不能,至少不知道malloc
的实现版本的内部结构以及它的分配块的数据结构是什么样的。
答案 2 :(得分:1)
你做不到。由于您首先分配了内存,因此您负责跟踪分配的内容和内容。
答案 3 :(得分:0)
使用sizeof(p).
如果你要求用于完成malloc调用的内存块的大小,这可能是特定于版本的。
答案 4 :(得分:0)
这没有标准,因此具体实施。但是,在Windows上,您可以使用_msize
。