AGB  ·  Datenschutz  ·  Impressum  







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

Speicherbedarf Datenverbund?

Ein Thema von Lotus · begonnen am 30. Apr 2009 · letzter Beitrag vom 1. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Lotus

Registriert seit: 26. Feb 2007
85 Beiträge
 
Delphi 7 Personal
 
#1

Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 06:37
Servus,

ich habe folgende Typdeklartionen:

Delphi-Quellcode:
type tpointer=^tdaten;
tdaten=record
name:string[10];
next:tpointer;
end;
Für mich wären dies ein Speicherbedarf von 15Byte (11 für String+4Byte für den Pointer)

Delphi gibt mir allerdings per sizeof(tdaten) eine größe von 16 Byte aus... warum?
Bzw. welches Ergebnis ist nun richtig?

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 06:40
Es wird auf auf Word-Grenzen ausgerichtet. 15Bytes wäre es bei packed
Markus Kinzler
  Mit Zitat antworten Zitat
Lotus

Registriert seit: 26. Feb 2007
85 Beiträge
 
Delphi 7 Personal
 
#3

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 06:46
Kann ich sizeof so einstellen das es nur packed ausgibt? bzw. wo is der unterschied von packed?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 07:05
Das Schlüsselwort 'packed' weist den Compiler an, die Felder bytegenau anzuordnen. Dann ist der Zugriff aber etwas langsamer. Ohne diesen Zusatz werden die Felder (aus Gründen der Performance) -wie mkinzler schon sagte- 16bit-weise angeordnet.

'SizeOf' kann man nicht 'einstellen'
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Lotus

Registriert seit: 26. Feb 2007
85 Beiträge
 
Delphi 7 Personal
 
#5

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 07:11
Gäbe es noch eine andere Methode den Speicherbedarf (packed) auszugeben?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 07:30
Was gefällt dir an packed nicht?
Warum ist die das eine Byte so wichtig?
Markus Kinzler
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#7

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 08:51
Zitat von Lotus:
Gäbe es noch eine andere Methode den Speicherbedarf (packed) auszugeben?
Ich glaube du missverstehst hier etwas. Es geht nicht um die Ausgabe des Speicherbedarfes, denn der wird so wie du den Record deklariert hast richtig ausgegeben. Du müsstest deinen Record anders deklarieren:

Delphi-Quellcode:
tdaten = packed record
  name : string[10];
  next : tpointer;
end;
Auf diese Weise wird der Speicher anders angeordnet (eben nicht mehr wortweise) und der Speicherbedarf ändert sich entsprechend. Geht, wie schon von den Vorrednern geschrieben, etwas zu Lasten der Performance.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 09:00
Zitat von alzaimar:
-wie mkinzler schon sagte- 16bit-weise angeordnet.
Die Ausrichtung kann schon lange auf 1/2/4 oder 8 Byte eingestellt werden (Projektoptionen/Compiler/Codeerzeugung -> Ausrichtung von Record-Felder).
Bei neueren Delphi-Versionen ist hier der Default-Wert 8 Byte. Dies ist auch für neuerer Prozessoren (Pentium (?) und neuer) auch besser da hier die Prozessorarchitektur schon auf 64-Bit Speicherzugriff ausgerichtet ist).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 09:51
Zitat von Lotus:
Delphi gibt mir allerdings per sizeof(tdaten) eine größe von 16 Byte aus... warum?
Weil Delphi es per alles Standard so ausrichtet, daß der Zugrigg optimaler Weise an Integergrenzen beginnt und auch die ganze Datenstruktur als vielfaches von Integern auftritt, also sich über ganze Integer-Operationen zu kopieren läßt.

Zitat von alzaimar:
-wie mkinzler schon sagte- 16bit-weise angeordnet.

'SizeOf' kann man nicht 'einstellen'
nein, es sind 32 Bit ...
Test: versuch es einfach mal mit string[8]

jupp, die Ausrichtung mußt du direkt am Record einstellen, also Packed oder nicht und wenn nicht, dann greift hier als Erstes das aktuell in der Unit gültige/letzte {$A...} bzw. {$ALIGN ...} (siehe OH) und wenn da nichts steht, dann das aus den Projektoptionen.

Zitat:
Kann ich sizeof so einstellen das es nur packed ausgibt? bzw. wo is der unterschied von packed?
blos weil dir ein Maß nicht gefällt, änderst du ja auch nicht das Linial, sondern das zu Messende

PACKED besagt ... ach, schau einfach mal bei Delphi-Referenz durchsuchenpacked in deine OH.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Speicherbedarf Datenverbund?

  Alt 30. Apr 2009, 10:02
Zitat:
Die Ausrichtung kann schon lange auf 1/2/4 oder 8 Byte eingestellt werden (Projektoptionen/Compiler/Codeerzeugung -> Ausrichtung von Record-Felder).
Bei neueren Delphi-Versionen ist hier der Default-Wert 8 Byte. Dies ist auch für neuerer Prozessoren (Pentium (?) und neuer) auch besser da hier die Prozessorarchitektur schon auf 64-Bit Speicherzugriff ausgerichtet ist).
In seinem Fall sind es wohl 2 Bytes
Markus Kinzler
  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 04:27 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