(ERLEDIGT) Größe von Aufzählungstypen SizeOF(..) ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

(ERLEDIGT) Größe von Aufzählungstypen SizeOF(..) ?

Beitrag von Soner »

Ist es normal das Freepascal bei SizeOf(vaString)=4 liefert ?

Code: Alles auswählen

 
// vaString ist ein Teil von  TValueType aus Classes
type
  TValueType = (vaNull, vaList, vaInt8, vaInt16, vaInt32, vaExtended,
    vaString, vaIdent, vaFalse, vaTrue, vaBinary, vaSet, vaLString,
    vaNil, vaCollection, vaSingle, vaCurrency, vaDate, vaWString, vaInt64,
    vaUTF8String, vaUString, vaQWord);
 

Folges passiert mit FPC:
IntToStr(SizeOf(vaString)) liefert 4
IntToStr(Integer(SizeOf(vaString))) liefert auch 4
IntToStr(Byte(SizeOf(vaString))) liefert auch 4

Turbo Delphi macht daraus 1 und das ist logisch weil TValueType nicht so groß ist 1 byte müßte reichen.
Zuletzt geändert von Soner am Mo 13. Mär 2017, 23:41, insgesamt 1-mal geändert.


Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Größe von Aufzählungstypen SizeOF(..) ?

Beitrag von Mathias »

Turbo Delphi macht daraus 1 und das ist logisch weil TValueType nicht so groß ist 1 byte müßte reichen.

Ich weis nicht mehr wie dies heisst, aber Turbo-Pascal hatte dies schon.
Das bei dir Delphi das 1 macht, ist verwunderlich, oder hast du etwas umgestellt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Größe von Aufzählungstypen SizeOF(..) ?

Beitrag von Soner »

Danke, ich sollte bei gelegenheit Handbuch von fpc lesen, ich bin noch aus 90ern (tp, delphi4)

@Mathias:
Es ging um die Größe bei fpc, Delphi macht es ja 1 Byte, Ich habe vor dem Posten der Frage nochmal mit Turbo Delphi (D2006) kontrolliert, lieferte erwartungsgemäß 1.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Größe von Aufzählungstypen SizeOF(..) ?

Beitrag von Soner »

Was mir auch noch aufgefallen ist, dass in fpc-Classes.pas für ReadValue und WriteValue auch 1 Byte verwendet wird:

Code: Alles auswählen

 
function TBinaryObjectReader.ReadValue: TValueType;
var
  b: byte;
begin
  Read(b, 1);
  Result := TValueType(b);
end;
 
procedure TBinaryObjectWriter.WriteValue(Value: TValueType);
var
  b: byte;
begin
  b := byte(Value);
  Write(b, 1);
end;
 


Wenn jetzt in der nächsten Zeit irgendein fpc-Devoloper auf die Idee kommt daraus:

Code: Alles auswählen

 
  Read(b, SizeOfValue(Value));
  Write(b, SizeOfValue(Value));
 

zu machen, dann werden viele Programme die Streaming benutzen, fehler haben und Dateien werden unlesbar oder beim schreiben die alten Dateien beschädigt..

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Größe von Aufzählungstypen SizeOF(..) ?

Beitrag von marcov »

Soner hat geschrieben: Turbo Delphi macht daraus 1 und das ist logisch weil TValueType nicht so groß ist 1 byte müßte reichen.


Turbo delphi braucht auch nur auf x86 zu laufen wo byte level access billig ist.

Antworten