Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#14

Re: Konstanter dynamischer Array <- Möglich?

  Alt 11. Mär 2009, 13:08
Eigentlich ist die Referenz -1 (steht normaler Weise für "liegt nicht im RAM") .. bzw 1, wenn nur eine Refferenz vorhanden ist ... hier aber sicherheitshalber 2, damit es nicht unter blöden Umständen vorkommt, daß mal versucht wird den "nicht vorhandenen" Speicher freizugeben oder darin rumzuschreiben.


Delphi-Quellcode:
Type TDynArray = packed Record
    RefCount: LongInt;
    ElementCount: LongInt;
    Data: packed Array[0..High({var})] of {Typ};
  End;

Var var: TMyDynArray;

var = @TDynArray.Data; // die Variable zeigt auf den Anfang von Data

// Pointer(var) = nil > nil {in EXE} > nil {in RAM}
//
// RefCount = 0 = -1 > 0
// ElementCount = 0 = Length(var) = Length(var)
// @Data - = var = var
also man kann (zumindestens bei Strings, welche im Grunde auch nur ein dynamisches Array darstellen)
aus dem Pointer rausbekommen, ob es Inhalt gibt oder der String '' ist
und aus RefCount bekommt man mit wo der String liegt (-1 = Konstante, 0 gibt's nicht und größer 0 gibt es die Anzahl der Referenzen an)

PS: Beim alten Delphi-MemoryManager lag vor RefCount noch dein weiter Integer vom SpeicherManager (welcher Status des Speicherblocks angab)


[add]
Zitat von SebE:
Edit: Warum legen dynamische Array keine Größen-/Referenz-Felder an?
bei statischen Array's ist das anders angelegt.
da gibt es keine Referenzzählung und auch die Arraygröße ist nicht in die Datein eingebaut.

dieses sieht praktisch so aus:
Delphi-Quellcode:
Type TStaticArray = packed Record
    Data: packed Array[0..High({var})] of {Typ};
  End;
Length(array) und High(array) werden dabei direkt in das Programm eingebaut.
(die Länge kennt der Compiler ja und baut dann da wo diese Funktionen aufgerufen würden direkt die entsprechende Zahl ein)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat