Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Speicherlayout von dynamischen Arrays

  Alt 3. Mär 2020, 18:14
Wie ist ein dynamisches Array im Speicher aufgebaut? Die einzige Info die ich fand war von Delphi 2007:

http://docs.embarcadero.com/products...rmats_xml.html unter "Dynamic Array Types"

s = sizeOf(T)
OffsetContent
-8Reference count
-4Length indicator
0..Length * s -1Element [0]


Wenn ich es richtig sehe, gilt das nur für Win32, unter Win64 ist der Längenindikator 8 Byte lang während der Referenzzähler 4 Byte geblieben ist. Richtig?


Heißt: Wollte ich den Referenzzähler eines dynamischen Arrays bestimmen würde es lauten

Delphi-Quellcode:
{$POINTERMATH ON}
/// <param name="ptr">
/// Zeiger auf das erste Element des Arrays (also <c>@myArray[0]</c>)
/// </param>
function GetArrayRefCount(ptr: PNativeUInt): NativeUInt; //inline;
var
   refCount: PInteger; // Not native int
begin
   Dec(ptr, 1); // now pointing to length indicator
   refCount := PInteger(ptr); Dec(refCount);
   Result := refCount^;
end;
  Mit Zitat antworten Zitat