所以我有一个任务要在C语言中实现自己的malloc和free。问题是memory_free(void *ptr)函数的要求之一。如果指针无效,即它没有被memory_alloc(unsigned int size)分配,则必须返回1,否则返回0。我无法想出一种方法来做到这一点,而不会非常耗时。
我的内存结构如下:我有一个全局指针指向我要用作堆的数组的开头。每个内存块都有一个int头来告诉它的大小和是否空闲。
这是我当前的memory_free(void *ptr)函数,TYPE是typedef unsigned int:
指针
我的内存结构如下:我有一个全局指针指向我要用作堆的数组的开头。每个内存块都有一个int头来告诉它的大小和是否空闲。
这是我当前的memory_free(void *ptr)函数,TYPE是typedef unsigned int:
int memory_free(void *ptr)
{
void *head = ptr;
if (head == NULL)
return 1;
head -= sizeof(TYPE);
if (!((*(TYPE*) head) & 1 ))
return 1;
(*(TYPE*) head) &= ~0x1;
return 0;
}
指针
ptr
指向用户块的第一个字节,这意味着如果我想读取头部,我必须返回4个字节。检查指针有效性的一种解决方案是从开头遍历堆并查看是否找到了相关的头部,但这不够高效。请问有更好的方法吗?
free
会导致未定义行为而不是抱怨指针的好原因。 - Blagovest Buyukliev