【发布时间】:2016-04-30 18:46:24
【问题描述】:
我正在模拟一个带有静态结构数组的内存块,其形式为:
typedef struct memBlock
{
unsigned int isAllocated = 0;
unsigned int processID = 0;
}memBlock;
我已经有一个类似malloc() 的函数,它将通过从进程中获取请求的内存大小并通过将 isAllocated 设置为 1 并将 PID 更改为请求进程的进程 ID。
所以现在我想编写一个类似free 的函数,通过将isAllocated 设置为0 并将PID 设置为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 是预处理器定义的常量
【问题讨论】:
-
@WhiZTiM 删除 C++ 标记可能为时过早,因为像
memBlock结构中所示的结构成员的内联初始化在 C 中是不可能的,但在 C++ 中是不可能的。 -
这不是 C,而是 C++。您应该使用 C++
new/delete运算符。并删除 C 标签。 -
也许你不明白我的评论。重复一遍:这不是 C 代码,而是 C++ C 和 C++ 是不同的语言,您需要使用正确的标记。
-
是的,我之前删除了 C++ 标签。它不是 C++。
-
@JoachimPileborg,注意到。下次我不会着急的。 :: 尽管如此,我只是笑了笑检查这篇文章的修订历史......标签战争:-)
标签: c memory-management simulation