AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Speicherbedarf 9 Boolean Werte ist TBitset eine Alternative
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherbedarf 9 Boolean Werte ist TBitset eine Alternative

Ein Thema von DataCool · begonnen am 26. Mai 2006 · letzter Beitrag vom 26. Mai 2006
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

Speicherbedarf 9 Boolean Werte ist TBitset eine Alternative

  Alt 26. Mai 2006, 12:53
Hi,

ich habe innerhalb einer Klasse 9 interne Boolean variablen,
die 9 public properties darstellen.

Da ich bei meinem Programm den Speicherbedarf sehr schmall und gering halten möchte,
stellt sich mir gerade die Frage ob es mir was bringt anstatt der 9 Boolean
Werte ein TBitset zu verwenden und bei den public properties
dann jeweils über get Und Set Methoden auf das Bitset zuzugreifen ?
Wenn ich mir jetzt aber die Klasse TBitset anschaue, sollte diese allein wegen
dem Class overhead mehr Speicher in Anspruch nehmen, als 9 boolean variablen oder ?

Hat jemand noch eine bessere Idee ?

Danke und Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 13:03
Klar hab ich ne bessere Idee

Bau die TBitSet lokal nach:
Delphi-Quellcode:
type
  TFoo = class
  private
    fBoolFlags: Cardinal;
  public:
    property Bool1: Boolean read fBoolFlags and 1 = 1 write fBoolFlags := fBoolFlags or 1 shl 1;
    property Bool2: Boolean read fBoolFlags and 2 = 2 write fBoolFlags := fBoolFlags or 1 shl 2;
...
  end;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 13:04
Hallo Data,

wenn die Flags logisch zusammengehören, könntest du sie in einem Set zusammenfassen (wie TBorderIcons bei TForm).

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 13:12
Hi,

beide genannten Lösungen gefallen mir gut und wären bei meiner Klasse auch anwendbar.
Die entscheidene Frage ist, was verbraucht weniger Speicher ?
Mittlerweile sind es auch 13 Boolean Werte.

Danke und Gruß

Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 13:48
Letzlich wird beides auf logische Bitoperationen zurückgeführt, deshalb dürfte der Speicherverbrauch identisch sein. Die Lösung mit Sets bietet sich an, wenn die Flags zusammengehören. Bei der Lösung von Dax ist das Setzen/Lesen der Flags etwas einfacher, der von ihm angegebene Code dürfte aber vom Compiler nicht akzeptiert werden.

Hier eine Korrektur:

Delphi-Quellcode:
type
  TFoo = class
  private
    FBoolFlags: Cardinal;
    function GetFlags (aIndex: Integer): Boolean;
    procedure SetFlags (aIndex: Integer; aValue: Boolean);
  public
    property Bool1: Boolean index 0 read GetFlags write SetFlags;
    property Bool2: Boolean index 1 read GetFlags write SetFlags;
  end;

function TFoo.GetFlags (aIndex: Integer): Boolean;
begin
  Result := Odd(FBoolFlags shr aIndex);
end;

procedure TFoo.SetFlags (aIndex: Integer; aValue: Boolean);
begin
  if aValue then
    FBoolFlags := FBoolFlags or (1 shl aIndex)
  else
    FBoolFlags := FBoolFlags and (not (1 shl aIndex));
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 13:51
Zitat von Hawkeye219:
Bei der Lösung von Dax ist das Setzen/Lesen der Flags etwas einfacher, der von ihm angegebene Code dürfte aber vom Compiler nicht akzeptiert werden.
No wonder Das ist Chrome-Code, und Chrome kennt nun mal implizite Getter/Setter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 14:34
Nur Delphi kennt dat leider nicht -.-''

Aber naja, aus 13 Byte (Boolean) 2 Byte gemacht ist schon 'ne große Reduzierung, auch wenn 11 Byte eigentlich noch garnicht soooo viel sind ^^

Beo BOLL(LongBool) wären das ja gleich 13*4=52 Byte gewäsen

Auch wenn die Angaben nur auf die verwendeten Bytes gerechnet sind ... was die Speicherausrichtung noch mehr verbraucht hätte, sollte lieber mal nicht betrachtet werden ^^
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Speicherbedarf 9 Boolean Werte ist TBitset eine Alternat

  Alt 26. Mai 2006, 14:42
Ok, ich danke euch allen,

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 03:39 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