AGB  ·  Datenschutz  ·  Impressum  







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

Bug oder Denkfehler?

Offene Frage von "Geri"
Ein Thema von Geri · begonnen am 23. Nov 2004 · letzter Beitrag vom 24. Nov 2004
Antwort Antwort
Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
47 Beiträge
 
Delphi 2005 Personal
 
#1

Bug oder Denkfehler?

  Alt 23. Nov 2004, 10:29
Hallo


Kann mir bitte jemand sagen ob ich hier einen Denkfehler mache oder ob es sich um einen Bug in Delphi 7.0 handelt;

Ich habe foldenes Record:

Type TDaqEvent = Record
Data:Word;
Time:LongWord;
ms:Word;
End;

var Event:TDaqEvent;

Wenn nun ich nun die Grösse des Records ermittle, dann liefert mir Delphi mit dem sizeOf-Opeator die

Grösse = SizeOf(Event); // ==> Ergebnis 12 Bytes!!!

Wenn ich die Summe aus Sizeof(Data) + Sizeof(Data) +Sizeof(Data) erhalte ich die Zahl 8.

Meiner Meinung nach stimmen 8 Bytes;

Hat jemand hierfür eine Begründung?

Vielen Dank

Geri
Gerhard
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Bug oder Denkfehler?

  Alt 23. Nov 2004, 10:33
Hallo Geri,

zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum.

Records werden nicht immer "komprimiert" gespeichert, sondern für schnellen Zugriff optimiert. Das kannst du verhindern, indem du das Wort "packed" davor setzt, also "packed record".
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#3

Re: Bug oder Denkfehler?

  Alt 23. Nov 2004, 10:54
Hi,

stell mal unter "Projektoptionen -> Compiler" die "Ausrichtung von Record-Feldern" auf 1 und erzeug das Projekt neu

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
47 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Bug oder Denkfehler?

  Alt 23. Nov 2004, 11:32
Hallo ihr Beiden

Vielen Dank für die freundliche Begrüssung und die kompetenten Antworten. Habe beide Lösungsansätze probiert und jetzt funktionieren meine Routinen tadellos.

Super, vielen Dank und beste Grüsse

Geri
Gerhard
  Mit Zitat antworten Zitat
whoareyou

Registriert seit: 16. Jul 2004
1 Beiträge
 
#5

Re: Bug oder Denkfehler?

  Alt 24. Nov 2004, 06:35
schreib es doch so hin:


Type TDaqEvent = Record
Data:Word;
ms:Word;
Time:LongWord;
End;


Dann hast Du den Record auf natürlcihe Art und Weise alligned und die size ist 8 byte.
Du hats somit selbe in der Hand wie Deine Records im Speicher liegen und musst es nicht dem Compiler überlassen.

Manchmal macht es auch Sinn ein zusätzliches Feld (reserved, siehe WinAPI) einzuführen nur um einen record zu allignen.


Gruss
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:43 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