【发布时间】:2020-10-21 09:43:57
【问题描述】:
我正在尝试为我的操作系统构建内存管理器。但是,当我添加指向第一个堆项的下一个节点属性的指针时,它不起作用。我怀疑它无法将指向堆项的指针转换为无符号整数指针。
常量
#define MEMORY_BLOCK_FREE 0
#define MEMORY_BLOCK_USED 1
#define MEMORY_BLOCK_TAIL 2
内存块结构
typedef struct
{
u32* addr;
u32 size;
u8 state;
u32* next_block;
} memory_block;
添加功能
u32* add_block(u32 size)
{
memory_block* cblock = &head;
while (1)
{
if (cblock->state == MEMORY_BLOCK_TAIL)
{
break;
}
cblock = (memory_block*)cblock->next_block;
}
u32* addr = cblock->addr;
cblock->size = size;
cblock->state = MEMORY_BLOCK_USED;
memory_block next;
next.state = MEMORY_BLOCK_TAIL;
next.addr = (u32*)(addr + size);
cblock->next_block = (u32*)&next;
}
【问题讨论】:
-
addr + size是可疑的。解释一下函数参数u32 size代表什么。大小(以字节为单位)? -
我想把
addr + size变成一个指针。 u32 定义为unsigned int。 u32 是 32 位,即 4 个字节。 -
让我们再试一次。
add_block(1)是 4 字节块、1 字节块还是什么? -
@chux-ReinstateMonica,我不明白。
addblock(x)分配一个 x 字节的块。 -
next.addr = (u32*)(addr + size);将size*4添加到地址 - 指针添加。我不会称之为“addblock(x)分配一个 x 字节的块。”
标签: c pointers memory-management operating-system heap-memory