Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Frage zu den "neuen" Records in 10.4

  Alt 15. Jun 2020, 05:36
Tut mir leid für den vielen Aufwand den ich verursacht habe. Das hätte sich vermeiden lassen wenn ich erst einmal geschaut hätte was an meinen Tests genau fehlgeschlagen ist. Dann hätte ich auch nicht unsinnige Schlüsse gezogen wie dass bei einer Zuweisung das Padding nicht mitkopiert werden würde.

Um genau zu sein ging es um Padding-Bytes am Schluss eines Records. Beispiel:

Delphi-Quellcode:
TPaddingAtEnd = record
  a:   Integer;
  b:   Byte;
end;
Hier war unter 10.4 das Padding hinten immer 0xFF und in den Tests wurde dann das Padding bei Record A auf 0xFF gesetzt und erwartet dass die Bytes ungleich waren mit denen von Record B. In 10.0 scheint das Padding hinten allerdings wie erwartet zufällig zu sein.

Für die ganz interessierten:

Delphi-Quellcode:
paddingAtEnd1.a := 10;
paddingAtEnd1.b := 99;
paddingAtEnd2 := paddingAtEnd1;
TRecordHelper.FillPaddingBytes(paddingAtEnd1, $FF);
CheckFalse( isBytewiseEqual(paddingAtEnd1, paddingAtEnd2) );
wobei

Delphi-Quellcode:
function TestRecordHelper.isBytewiseEqual<T>(const a, b: T): Boolean;
var
   comparer: IEqualityComparer<T>;
begin
   comparer := TEqualityComparer<T>.Default();
   Result := comparer.Equals(a, b);
end;
Das CheckFalse(..) schlug jetzt in 10.4 fehl da die beiden paddingAtEnd -Records schon von Anfang an am Schluss FFs hatten. Ich habe das Muster in den Tests jetzt gegen 0xAA, 0xBB usw getauscht und die Welt scheint wieder in Ordnung zu sein.
  Mit Zitat antworten Zitat