Я пытаюсь инициализировать блок кучи пространства на несколько небольших блоков фиксированного размера без использования 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(). В конкретном оборудовании, которое мы используем, 80 килобайт кучного пространства должно быть нарезано на различные фиксированные размеры. Реализация моего дизайна редко проходит гладко .... lol – Darrell
Этот курс кажется действительно интересным, я имею в виду реализацию своего собственного malloc(), мне бы очень хотелось увидеть, как только вы его завершите !! @Darrell –