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)
Offset | Content |
-8 | Reference count |
-4 | Length indicator |
0..Length * s -1 | Element [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;