我试图将一堆堆空间初始化为几个较小的固定大小块而不使用malloc。每个块指向下一个块。基本上,这是一个家庭滚动链表,不使用malloc。该结构看起来像这样:如何初始化和操作地址指针
/******** Memory Table Entry Data Structure**********/
typedef struct
{
????? block_address; //<- What datatype should I use here?
void* next_free_block;
}mem_table_entry_t;
/******** Memory Table Data Structure**********/
typedef struct
{
mem_table_entry_t two_kib[8];
}mem_table_t;
链接器通过一个外部变量_sys_memory,像这样使得堆的起始地址可供使用的程序:
extern void* _sys_memory; // Start of system memory
在我的初始化程序, 我想制作一个指针,并指向与_sys_mem相同的地址。稍后,我想在2048年前增加指针,并将该值分配给下一个块的起始地址。我应该使用什么样的数据类型,以及如何操作它?
#include <stdint.h>
#include "mem_manager.h"
mem_table_t memory_table;
void mem_initialize(void)
{
int block_count = 0;
void *dynamic_address;
dynamic_address = _sys_memory;
while(block_count < 8)
{
memory_table.two_kib[block_count].block_address = dynamic_address;
dynamic_address = (&dynamic_address + 0x800);
memory_table.two_kib[block_count].next_free_block = dynamic_address;
block_count++;
}
请告诉我究竟是什么 –
@EdHeal的动机 - 这是一个大学课程的一部分。这个特殊的任务我们需要创建我们自己的malloc()和free()函数。我们使用的特定硬件具有80kB的堆空间,可以切割成各种固定大小。我的设计实现很少顺利...... lol – Darrell
这个课程看起来很有趣,我的意思是实现你自己的malloc(),我真的很想看到你完成它! @达雷尔 –