Ich versuche, einen Block von Heap-Speicherplatz in mehrere kleinere Blöcke fester Größe zu initialisieren, ohne Malloc zu verwenden. Jeder Block zeigt auf den nächsten Block. Im Grunde genommen handelt es sich um eine Home-Rolled-Linked-List, die kein malloc verwendet. Die Struktur sieht so aus:So initialisieren und bearbeiten Sie einen Adresszeiger
/******** 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;
Der Linker zur Verwendung der Startadresse des Haufens zur Verfügung stellt, die von einem Programm durch die eine externe Variable _sys_memory, etwa so:
extern void* _sys_memory; // Start of system memory
In meiner Initialisierungsroutine Ich möchte einen Zeiger machen und es auf die gleiche Adresse Adresse wie _sys_mem zeigen. Später möchte ich den Zeiger um 2048 erhöhen und diesen Wert der Startadresse des nächsten Blocks zuweisen. Welche Art von Datentyp sollte ich verwenden und wie kann ich sie manipulieren?
#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++;
}
Bitte sagen Sie mir, was die Motivation für diese –
@EdHeal ist - es ist Teil eines Universitätslehrganges ist. Diese spezielle Aufgabe benötigen wir, um unsere eigenen Funktionen malloc() und free() zu erstellen. Die spezielle Hardware, die wir verwenden, hat 80 kByte Heap-Speicherplatz, der in verschiedene feste Größen zerlegt werden kann. Die Umsetzung meines Designs verläuft selten reibungslos .... lol – Darrell
Dieser Kurs scheint wirklich interessant zu sein, ich meine die Implementierung Ihres eigenen malloc(), ich würde wirklich gerne sehen, sobald Sie es abgeschlossen haben !! @Darrell –