【发布时间】:2012-07-10 10:26:56
【问题描述】:
我正在尝试在 C 中构建一个内存分配器。用户首先说他想要使用多少内存,以及可以使用的最小内存块大小。
因此,例如,假设用户请求 1024B,最小块大小为 8B。 这意味着可能的块大小为 1024、512、256、128、64、32、16 和 8。
为了跟踪空闲的内存块,我有一个指向结构的指针数组。这些结构称为 Header,数组称为 FreeList。 我的意思是,FreeList[0] 将包含一个指向内存中内存大小为 8 块的空间的指针。 FreeList[1] 将包含一个指向内存中内存大小为 16 块的空间的指针.等等
typedef void * Addr;
struct Header
{
Addr next;
int order;
};
struct Header *FreeList[];
我正在尝试为此空闲列表分配内存,以便与以下代码一起使用:
FreeList = malloc(Order*sizeof(struct Header));
Order 是您可以拥有的不同块大小的数量。
我收到编译错误“FreeList”的类型不完整。
我不希望这些指针指向任何地方,我只想为数据分配空间。
【问题讨论】:
-
这是真正的代码吗?您在结构定义的末尾缺少
;。另外,如果它是一个指针数组,那么数组的大小是多少?为什么没有在索引中指定任何内容? -
Header的定义是否包含在执行分配的翻译单元 (.c) 中?如果不是,Header只能用作指针——编译器不知道它的大小。 -
是的,这都在同一个 .c 文件中。
标签: c arrays pointers memory-management