AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

records im Speicher...

Ein Thema von SnuffMaster23 · begonnen am 29. Okt 2007 · letzter Beitrag vom 30. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#1

records im Speicher...

  Alt 29. Okt 2007, 14:13
Es geht um dieses record:
Wieso sieht das im Speicher denn so ausund nicht so?
Das ist zum einen Platzverschwendung und zum anderen richtig unpraktisch wenn man aus einer Datei lesen möchte.
Gibts da nen Trick um das zusammenzuschieben?
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#2

Re: records im Speicher...

  Alt 29. Okt 2007, 14:15
Hast du mal Packed Record probiert ?
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#3

Re: records im Speicher...

  Alt 29. Okt 2007, 14:16
Probier mal nicht record sondern packed record zu benutzen.

Edit: Mann ist Corps heute wieder schnell
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#4

Re: records im Speicher...

  Alt 29. Okt 2007, 14:20
jo damit gehts!
Mann seid ihr schnell
Danke!
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: records im Speicher...

  Alt 29. Okt 2007, 14:24
Warum beantwortet ihr seine Frage nicht?

Der Delphi Compiler richtet die Felder des Records an Byte-Grenzen aus. Dies optimiert den Zugriff auf die Speicherbereiche, da die CPU sowieso immer 4 Byte (bei einer 32-Bit CPU) aus dem Speicher lädt. Sind die Felder an Byte-Grenzen ausgerichtet, ist es für die CPU "einfacher" die wirklich benötigten Bytes zu extrahieren. Der zusätzlich benötigte Speicherplatz ist heute vernachlässigbar. Die Ausrichtungsgrenze kann in den Compiler Optionen eingestellt werden.

Will sicherstellen, dass kompatible Records auch mit einer anderen Ausrichtungsgrenze erstellt werden, kann man mit dem Schlüsselwort packed die Ausrichtung der Felder an Byte-Grenzen verhindern. Dabei kommt dann das raus, was du eigentlich erwartet hattest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

Re: records im Speicher...

  Alt 29. Okt 2007, 14:26
Deswegen hatte ich den Link noch in meiner Antwort drin. Da steht das auch nochmal kurz und knapp erklärt drin
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#7

Re: records im Speicher...

  Alt 29. Okt 2007, 14:41
Den Link hab ich auch erst auf den zweiten Blick gesehen^^

Aber wenn wir schonmal dabei sind:
Ist es schlimm mit
Delphi-Quellcode:
TID3v2FrameHeader = record
  FrameID: array[0..3] of Char;
  Size: Integer;
  Flags: Word;
end;
f.ReadBuffer(FHeader, 10); zu schreiben?
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: records im Speicher...

  Alt 29. Okt 2007, 14:49
Vielleicht ist es so besser?

f.ReadBuffer(FHeader,SizeOf(TID3v2FrameHeader)); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: records im Speicher...

  Alt 29. Okt 2007, 14:50
Ja, und wie. Stell dir vor, dein Compiler ändert seine Alignment-Grenzen auf zb 16 Byte. Dann ist deine Struktur wieder aufgebläht und nicht zum lesen zu gebrauchen... Daher benutze packed und sizeof!
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#10

Re: records im Speicher...

  Alt 29. Okt 2007, 15:04
Nein Klaus, mit SizeOf ist es nicht besser, dann liests mir ja 2 Bytes zu viel weg.
Genau das war ja die Frage, ob es schlimm ist die zwei Bytes hinten dran nicht 'vollzulesen'.

@Dax: joa, man kann ja nie wissen was dem Compiler auf einmal einfällt
Mir ist schon klar dass es mit packed und SizeOf richtig ist, das mit den 10 war nur meine Notlösung. Funktioniert hat sie ja

Hätt ich ja eigentlich selber draufkommen können... mit nem 64-Bit Compiler wärs wahrscheinlich schon schiefgegangen.
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz