AGB  ·  Datenschutz  ·  Impressum  







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

I wonder why

Ein Thema von ATS3788 · begonnen am 20. Jul 2011 · letzter Beitrag vom 23. Jul 2011
Antwort Antwort
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

I wonder why

  Alt 20. Jul 2011, 23:28
Delphi-Quellcode:
type
  SCSI_PASS_THROUGH_DIRECT = record
    Length : Word;
    ScsiStatus : Byte;
    PathId : Byte;
    TargetId : Byte;
    Lun : Byte;
    CdbLength : Byte;
    SenseInfoLength : Byte;
    DataIn : Byte;
    DataTransferLength : ULONG;
    TimeOutValue : ULONG;
    DataBuffer : Pointer;
    SenseInfoOffset : ULONG;
    Cdb : Array[0..15] of Byte;
  end;

  SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER = record
    Spt : SCSI_PASS_THROUGH_DIRECT;
    Filler : ULONG;
    SenseBuf : Array[0..31] of Byte;
  end;

var
a : Konstanten.SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; //// 77 byte sizeof
b : Laufwerke.SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; //// 80 byte sife of
Nun sitze ich hier und frage mich, verstehe ich nichts mehr
bei SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER
sizeof sollte 77 byte rauskommen was für die Anwendung
leider falsch ist es sollten 80 byte sein.

die Version a ist in einer externen unit
die Version b ist in der Version von delphi praxis
wo ich leider die Referenz nicht mehr finde

die frage wo kommen die 3 byte unterschied her.

ps

ich hoffe ich bin verständlich
ich bin gefrustet und nicht mehr ganz nüchtern
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: I wonder why

  Alt 20. Jul 2011, 23:41
Die ersten acht Felder im SCSI_PASS_THROUGH_DIRECT belegen zusammen 9 Byte. Wenn das Align auf 4 Byte gestellt ist, wird der nachfolgende ULONG auf die nächste 4-Byte-Grenze gesetzt (= 12). Das sind deine zusätzlichen 3 Byte.

Mit der Direktive {$A4} wird der record 80 Byte haben, während er mit {$A1} 77 Byte hat.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: I wonder why

  Alt 20. Jul 2011, 23:46
Tipp/Suchworte:
Data Alignment / Speicherausrichtung
packed record



Damit wirst'e hier im Forum und sonstwo im Netz alles finden.

http://de.wikipedia.org/wiki/Speicherausrichtung
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

AW: I wonder why

  Alt 20. Jul 2011, 23:51
Hi,

wähle bitte für deinen Thread auch noch einen Titel, an dem man zumindest erahnen kann, worum es geht.


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: I wonder why

  Alt 21. Jul 2011, 06:04
Vielleicht ein Wonderwoman Thread ?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#6

AW: I wonder why

  Alt 23. Jul 2011, 09:05
Wow ihr seit gut Danke.
Ganz verstanden habe ich das nicht.
Muss mir das mal in aller Ruhe anschauen.

PS

Ihr habt ja recht nur ich dachte dafür gibt es eh
keine Antwort und ich war angeschwippst
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: I wonder why

  Alt 23. Jul 2011, 09:11
nur ich dachte dafür gibt es eh keine Antwort und ich war angeschwippst
Das mußt du doch langsam gemerkt haben ... wir haben auf alles eine Antwort.
(nur auf einige Fragen, wie z.B. nach dem Sinn des Lebens, behalten wir Die für uns )

don't drink and prog
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#8

Data Alignment / Speicherausrichtung /packed record

  Alt 23. Jul 2011, 13:37
Zitat:
Mit der Direktive {$A4} wird der record 80 Byte haben, während er mit {$A1} 77 Byte hat.
OK {$A1} ist ein packed Record

Ich verstehe noch nicht ganz wie man auf die Compiler
Direktiven kommt. Kann ich das wo nachlesen.
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#9

AW: I wonder why

  Alt 23. Jul 2011, 13:39
Zitat:
Anmerkungen

Die Direktive $A steuert die Ausrichtung von Feldern in Record-Typen und Klassenstrukturen.

Im Status {$A1} oder {$A-} werden Felder nicht ausgerichtet. Alle Records und Klassenstrukturen werden gepackt.

Im Status {$A2} werden die ohne den Bezeichner packed deklarierten Felder in Record-Typen und die Felder in Klassenstrukturen auf Wortgrenzen ausgerichtet.

Im Status {$A4} werden die ohne den Bezeichner packed deklarierten Felder in Record-Typen und die Felder in Klassenstrukturen auf Doppelwortgrenzen ausgerichtet.

Im Status {$A8} oder {$A+} werden die ohne den Bezeichner packed deklarierten Felder in Record-Typen und die Felder in Klassenstrukturen auf Vierfachwortgrenzen ausgerichtet.

Die Ausrichtung von Feldern in Record-Typen wird in der Delphi-Sprachreferenz beschrieben.

Variablen und typisierte Konstanten werden unabhängig von der Direktive $A immer für einen optimalen Zugriff ausgerichtet. Der Status {$A8} beschleunigt die Ausführung.
OK habe es jetzt verstanden Danke
Martin MIchael
  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 13:54 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