AGB  ·  Datenschutz  ·  Impressum  







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

Typecasting

Ein Thema von calibra301 · begonnen am 24. Jul 2018 · letzter Beitrag vom 25. Jul 2018
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Typecasting

  Alt 25. Jul 2018, 10:17
Nein, da kommt immer das raus, was ich erwarte, denn Arrays sind "praktisch" IMMER packed.

Außerdem gibt {$A} nur die maximale Ausrichtung an, wobei die Typen der Array-Felder hier ALLE gleich sind, innerhalb des Array, und sich die Array-Felder somit immer an sich selber ausrichten, also direkt hintereinander.

Das trifft auch auf ein Array of TMist zu, welches in sich pecked und direkt aneinanderhängend ausgerichtet ist, auch wenn dort "natürlich" das zusätzliche Füllbyte enthalten bleibt, da es im "kompleten" Typen eingebaut ist.
Delphi-Quellcode:
// {$ALIGN} mindestens 2
type
  TMist = record
    a: Word;
    b: Byte;
    // FüllByte
  end;

  TMist = record
    a: Byte;
    // FüllByte
    b: Word;
  end;
TMist ist 4 Byte und wird somit auch an Integergrenzen ausgerichtet.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Jul 2018 um 10:20 Uhr)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
627 Beiträge
 
Delphi XE6 Enterprise
 
#2

AW: Typecasting

  Alt 25. Jul 2018, 10:31
Nein, da kommt immer das raus, was ich erwarte, denn Arrays sind "praktisch" IMMER packed.

Außerdem gibt {$A} nur die maximale Ausrichtung an, wobei die Typen der Array-Felder hier ALLE gleich sind, innerhalb des Array, und sich die Array-Felder somit immer an sich selber ausrichten, also direkt hintereinander.

TMist ist 4 Byte und wird somit auch an Integergrenzen ausgerichtet.
Wenn ein Array of Byte ins Spiel kommt, sind Integergrenzen aber eher nicht gewünscht. Darüber bin ich nämlich gefallen bei der Umstellung unserer Programme von Delphi 5 auf XE. Bei D5 war alles bytealigned und bei XE nicht...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Typecasting

  Alt 25. Jul 2018, 10:49
MAXIMAL!!!

Bytes werden IMMER an Bytegrenzen ausgerichtet
und Word werden immer an Wordgrenzen ausgerichtet (wenn ALIGN mindestens 2, also {$A+} und {$ALIGN 2} bis {$ALIGN 16} )

Nur bei {$A-} und {$ALIGN 1} oder packed array und packed record wird WORD an 1-Bytegrenzen ausgerichtet, aber niemals wird es mehr sein, also niemals tauchen Füllbytes auf, zwischen WORD und WORD.


$MINIMUMENUMSIZE füllt auf,
aber $ALIGN kürzt immer nur
Ein Therapeut entspricht 1024 Gigapeut.
  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 10:32 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