如何获得一段内存指针的大小,由函数“malloc”编集

时间:2010-11-29 06:13:24

标签: c++ c visual-c++

  

可能重复:
  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>

???

5 个答案:

答案 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).

获得指针p的大小

如果你要求用于完成malloc调用的内存块的大小,这可能是特定于版本的。

答案 4 :(得分:0)

这没有标准,因此具体实施。但是,在Windows上,您可以使用_msize