AGB  ·  Datenschutz  ·  Impressum  







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

Spring4D Nullable<T> fHasValue: string;

Ein Thema von freimatz · begonnen am 26. Mär 2020 · letzter Beitrag vom 30. Mär 2020
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Spring4D Nullable<T> fHasValue: string;

  Alt 26. Mär 2020, 10:04
Ja, mit ein paar kleinen Änderungen im Delphi würde der Typ dann für NullableBoolean nur 2 Byte benötigen. (oder gar 1 Byte, wenn man z.B. nur 1 bzw. -1 für True annimmt, bzw. wenn nur das erste Bit werthaltig ist)
Falls du sicherstellen kannst, dass der die Variable immer initialisiert wird, könntest du den Typen entsprechend anpassen.

Oder ein Treestate-Boolean nutzen, aber dann mußt du "true" wirklich mit = True prüfen.
Delphi-Quellcode:
const NullBool = Boolean($55);

B := NullBool;
if not B then FALSCH
if B = False then FALSCH;
if B = True then WAHR;
if B = NullBool then LEER;
if B then WAHR_oder_LEER;
Wobei du hier den Speicher selbst initialisieren mußt, da automatische Initialisierungen immer nur 0 verwenden, was natürlich False wäre.

In einem Record, mit paar Implizit-Casts könne man hier noch False und Null im Record umdrehen, bzw. drinnen einen ENUM (Null,True,False) benutzen.

Ein MemoryLeak sollte aber beim Nullable<T> nicht bleiben.
Wo/wie benutzt du denn diesen Typen?




Wenn man das NULL im Datentypen selbst speichern könnte, bzw. wenn es möglich ist dort einen Wert im Wertebereich als NULL zu definieren,
dann ändert sich am eigentlichen Speicherverbrauch natürlich nichts.
Aber für soeinen generischen Typen, der alles aufnehmen kann, ist sowas natürlich garnicht oder nicht "einfach" umzusetzen.

Siehe dazu die Fließkommatypen (natürlich abgesehn von Currency) ansieht, dann sind da ein paar Bitkombinationen frei, die für sowas wie NAN, Inf und NegInf verwendet werden konnten.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Mär 2020 um 10:16 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Spring4D Nullable<T> fHasValue: string;

  Alt 27. Mär 2020, 07:25
Es ist aber kein "object" sondern ein record

Ein MemoryLeak sollte aber beim Nullable<T> nicht bleiben.
Wo/wie benutzt du denn diesen Typen?
Ich selber eigentlich (noch) gar nicht. Die Verwendung ist im code schon drin und ich bin halt bei der Suche nach Leaks darübergestolpert.

Am Besten wäre EMB, würde das native unterstützen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Spring4D Nullable<T> fHasValue: string;

  Alt 27. Mär 2020, 11:42
Es ist aber kein "object" sondern ein record
Jupp, und da kommt es drauf an, wo diese Variable liegt.

Global oder als Feld in einem Objekt, wo der Speicher initialisiert wird,
oder als lokale Variable in einer Funktion/Prodedur/Methode, wo das eben nicht passiert.

Wobei Strings, dynamische Arrays und Interfaces "immer" initialisiert werden. (außer wenn in Pointern, wo jemand alles falsch macht und die Speicherverwaltung verhunzt hat)

automatisch freigegeben wird der String auch immer automatisch. (weswegen er auch vorher initialisiert werden musste, damit die Automatik funktioniert)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
491 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Spring4D Nullable<T> fHasValue: string;

  Alt 27. Mär 2020, 13:59
Es ist aber kein "object" sondern ein record
Naja, das kommt darauf an, wie man object hier interpretiert.
Wenn damit Objekttypen, also TChild = object(TAncestor) gemeint sind, dann hast du recht. Allerdings sind ja zunächst einmal record bzw. class -Instanzen auch Objekte ( -> "Instanzen eines vordefinierten Typs").
Dennis
  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:02 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