@bluecode, die allokierbare größe ist undynamisch bei bitmaps/stack
Aber wie sehen die Vor + Nachteile eines Baumes aus??
Man kann beliebige 2^n Speichereinheiten verwalten, da jeder node zwei child hat.
Bei ToasterOS kann man so startend ab 32 B, 64 B, 128 B bis hinauf zu theoretischen 4 GB allokieren.
Wenn man das weiterführen würde, könnte man noch zusammenhängenden (hintereinanderfolgende) Speichereinheiten machen.
Du hast da einen Heap Tree, welcher den Heap beschreibt.
Dieser Heap Tree besteht aus Heap Segment Deskriptoren, von denen da der erste (top) vorhanden sein muss.
Dieser hat zwei Pointer welche zu weiteren Heap Segment Deskriptoren zeigen können, falls das Heap Segment zum Teil frei ist.
Der Status gibt also an wie und ob die Heap Segmente belegt sind und ob Pointer zum nächsten Heap Segment Deskriptor zeigt.
lg,
Toaster
Wird wie folgt bei TOS/Tin verwaltet:
; Heap Segment descriptor:
; Offset Size Name content
; 00h dword HS Size size of each Heap Segment
; 04h byte state the state of the Heap Segments
; 05h dword Pointer1 next Heap Segment descriptor pointer
; 09h dword Pointer2 next Heap Segment descriptor pointer
; state:
; high nibble low nibble
; yyyy xxxx
; 7654 3210
; 3210 3210
; the low nibble (xxxx) describes the first Heap Segment, the high (yyyy) the second
; each nibble is shared into 4 bits (3210):
; 0-1: 00 = full free
; 01 = partly free (=> Pointer points to next Heap Segment descriptor)
; 10 = reserved
; 11 = full used
; 2: reserved bit (1 = do not access Heap Segment or descriptor in any way [equal to preserved])
; 3: present (set if ~, cleared if not ~)
Mit einem Heap Tree kann man Speicher also sehr dynamisch verwalten, man kann dem Speicher sogar einen Status zuweisen (liegt in der Programmierung des Programmierers).