我正在用一个静态结构数组来模拟一个内存块,它的形式为:
typedef struct memBlock
{
unsigned int isAllocated = 0;
unsigned int processID = 0;
}memBlock;我已经获得了一个malloc()-like函数,它将通过从进程获取所请求的内存大小,并通过将isAllocated设置为1将数组的一部分标记为已占用,并将PID更改为请求进程的进程ID来模拟malloc。
所以现在我想写一个像free这样的函数,它通过将isAllocated和PID分别设置为0和0,从这个数组中释放“内存”,但是我应该如何实现呢?我知道从概念上讲,我需要从这个数组的索引0开始,也许可以检查第一个索引,其中isAllocated =1,以及一个非零PID,对吗?到目前为止,我已经实现了这个功能:
void* custom_free(void* ptr, unsigned int size)
{
unsigned int blockIndex = 0, sizeCount = 0, startIndex = 0;
if(ptr){ free(ptr); }
}编辑:在前面的代码中,我有一个对memBlock结构的malloc调用,如下所示:
memBlock *block = (memBlock *)malloc(BLOCK_SIZE);
其中BLOCK_SIZE是预处理器定义的常量
发布于 2016-05-01 02:51:57
存储关于分配器所分配的内存块的信息的一种常见方式是将信息结构存储在它所分配的内存块中。
因此,不是分配size字节,而是分配size + sizeof(memBlock)字节,并使用指针作为指向memBlock结构的指针并填充所需的信息。然后在memBlock结构(如&((memBlock *) ptr)[1])之后返回一个指向内存的指针。
释放时,减去memBlock结构的大小以获得指向memBlock结构的原始指针。
当然,这使得像isAllocated这样的成员几乎毫无用处。如果您有自己的块,并且仅以这些块的倍数进行分配,则需要存储有关分配了哪些块的信息,以及块的数量。
https://stackoverflow.com/questions/36958822
复制相似问题