![]() |
Re: Speicherbedarf Datenverbund?
Zitat:
|
Re: Speicherbedarf Datenverbund?
Zitat:
(D7 und D2009 machen bei der Recordgröße per Standard 4) Zitat:
Zitat:
Delphi-Quellcode:
müßte doch mindestens 8(3) + 4 Byte sein, wenn "next" an der nächsten 8 Byte-Genze liegen würde?
{$A8}
type tpointer=^tdaten; tdaten=record name: string[2]; next: tpointer; end; |
Re: Speicherbedarf Datenverbund?
Ich persönlich möchte gar nichts mit diesem Datensatz anfangen. Es geht nur darum, das ich in ein paar Tagen meine Prüfung (Abitur) in Informatik ablegen muss und mein Lehrer stellt gern einmal solche Aufgaben wo man den Speicherbedarf ermitteln soll. Dürfte normalerweise kein Problem darstellen, aber nur um sicherzugehen wollte ich halt mit sizeof nachprüfen. Mit packed dürfte das ja nun ganz gut funktionieren.
Noch ne kurze Frage: Bei Pointern haben wir gelernt das man 4Byte für den Zeiger selbst braucht. Brauch ich diese 4 Byte nur einmal? Oder brauch ich diese 4Byte für die Anzahl meiner Datensätze? Nach dem Datensatz oben (packed) haben wir ja einen Verbrauch von 15Byte.. hierzukommen dann diese 4Byte für den Pointer.. wenn ich jetzt 2datensaetze habe... brauch ich dann diese 4 byte noch ein zweites mal? |
Re: Speicherbedarf Datenverbund?
Eine 2. Pointer variable belegt wieder 4 Bytes
|
Re: Speicherbedarf Datenverbund?
Zitat:
|
Re: Speicherbedarf Datenverbund?
ok danke sehr.. damit haben sich alle fragen geklärt!
|
Re: Speicherbedarf Datenverbund?
Zitat:
Bei ungepackten/ausgerichteten Records: der Beispielrecord:
Delphi-Quellcode:
entweder du stellst dir ein Raster vor
daten = record
S: String[10]; B: Byte; i: Integer; K: Int64; P: Pointer; W: Word; end; per Standard also mit 4 Byteschritten (Integergrenzen) und richtest nacheinander die Elemente an den Grenzen aus
Delphi-Quellcode:
oder du rundest jedes Element auf die Gittergrößen auf
// packed / packed[1] 30 Byte
sSSSSSSSSSSBiiiiKKKKKKKKPPPPWW // unpacked / packed[4] 36 Byte = 9 * 4[Integer] 1---2---3---4---5---6---7---8---9--- sSSSSSSSSSS B iiiiKKKKKKKKPPPPWW // unpacked / packed[8] 56 Byte = 7 * 8[Int64] 1-------2-------3-------4-------5-------6-------7------- sSSSSSSSSSS B iiii KKKKKKKKPPPP WW // unpacked / packed[2] 32 Byte = 16 * 2[Word] 1-2-3-4-5-6-7-8-9-0-1-2-3-4-5-6- sSSSSSSSSSS B iiiiKKKKKKKKPPPPWW und rechnest dieses nur noch zusammen
Code:
. SizeOf/
packed packed[4] packed[8] packed[2] S: String[10]; 11 3*4= 12 2*8= 16 6*2= 12 B: Byte; 1 1*4= 4 1*8= 8 1*2= 2 i: Integer; 4 1*4= 4 1*8= 8 2*2= 4 K: Int64; 8 2*4= 8 1*8= 8 4*2= 8 P: Pointer; 4 1*4= 4 1*8= 8 2*2= 4 W: Word; 2 1*4= 4 1*8= 8 1*2= 2 =30 =36 =56 =32 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz