2016-09-22 4 views
1

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++; 
    } 
+1

Bitte sagen Sie mir, was die Motivation für diese –

+0

@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

+0

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 –

Antwort

0

Es gibt einige Zweideutigkeiten in Ihrer Idee (Sie haben nicht viele Details über die Idee der Implementierung eines malloc gegeben). Wie auch immer, haben Sie einen Fehler begangen hat, als Sie

dynamic_address=(&dynamic_address+0x800) 

schrieb Ursache es sein sollte:

dynamic_address = dynamic_address + 0x800 
+0

Ja, das habe ich mir gedacht. Wenn ich die Änderung mache, die Sie vorgeschlagen haben, gibt es einen Kompilierungsfehler: "Ausdruck muss ein Zeiger auf einen vollständigen Objekttyp sein." Gedanken? – Darrell

Verwandte Themen