Laden...

Typ mit 12 möglichen Werten

Erstellt von davechu vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.935 Views
D
davechu Themenstarter:in
46 Beiträge seit 2006
vor 16 Jahren
Typ mit 12 möglichen Werten

Hallo,

ich möchte einen Typ erstellen zur Speicherung von einem Wert, der entweder null ist (also null als Sprachkonstrukt, nicht als Zahl) oder eine Zahl von 1 - 12. Ich könnte zwar einen nullbaren Integer verwenden, aber das wäre unnötige Speicherverschwendung. Weiß jemand wie ich das bewerkstelligen kann?

0
767 Beiträge seit 2005
vor 16 Jahren

wenns nur ums speichersparen geht, nimm

int?

. soviel sparst du dir dadurch nicht und es gibt genug gründe, int statt short zu verwenden...

wenns drum geht sicherzustellen, das es keine anderen werte gibt, mach ein enum:


enum sowieso
{
 Eins, Zwei..., Zwölf
}
// und verwende dieses nullable:
private sowieso? mySowieso;

loop:
btst #6,$bfe001
bne.s loop
rts

6.862 Beiträge seit 2003
vor 16 Jahren

Sich unter .Net Gedanken um den Speicherverbrauch zu machen ist meist zu gut gemeinte Optimierung die nach hinten los gehen kann. Der kleinste verfügbare Datentyp ist byte. Bitfelder wie in C z.B. gibts nicht. Aber selbst die Bytes werden unter Umständen zu Integers aufgeblasen weil die effektiver für den Prozessor verarbeitbar sind.

Mit wie vielen Daten rechnest du den num dir Gedanken um den Speicherverbrauch zu machen?

Baka wa shinanakya naoranai.

Mein XING Profil.

3.971 Beiträge seit 2006
vor 16 Jahren

Ansonsten wäre vllt. noch ein bool-Array mit einer Länge von 5 eine Alternative

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo kleines_eichhoernchen,

ein bool belegt in C# ein Byte Speicherplatz. Das ist auch so, wenn man ein bool-Array deklariert. Die bools werden also auch in einem bool-Array nicht als Bits gepackt.

Hallo chri,

abgesehen davon, dass ich tallas Meinung bin, braucht man für 12 Zahlen und einen extra Wert, knapp 5 Bits. Wenn man davon viele Informationen unbedingt dicht speichern will, dann würde man wohl ein byte-Array verwenden und per Bitoperationen immer 5 Bits für einen Wert belegen. Darauf wollte kleines_eichhoernchen wohl hinaus. Das bedeutet aber auch, dass sich mache Werte über zwei Bytes erstecken.

Ich würde aber auch, eben weil ich tallas Meinung bin, auch int? verwenden, was allerdings nichts anderes ist als eine Abkürzung für Nullable<int>. Dabei werden 8 Bytes belegt.

herbivore

3.971 Beiträge seit 2006
vor 16 Jahren

Original von herbivore
Hallo kleines_eichhoernchen,

ein bool belegt in C# ein Byte Speicherplatz. Das ist auch so, wenn man ein bool-Array deklariert. Die bools werden also auch in einem bool-Array nicht als Bits gepackt.

Wusste ich nicht😉 😁 aber 5 mal ein Bool-Byte sind ja dann trotzdem weniger als ein 8 Byte-Int?.

Aber ich glaube nicht, dass es in einem Programm auf 3 Bytes ankommt.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

D
davechu Themenstarter:in
46 Beiträge seit 2006
vor 16 Jahren

Die enum-Methode gefällt mir sehr gut und dazu werde ich dann wohl int nehmen, wenn bool sowieso ein Byte belegt.. Auf die Performance selber kommt es weniger an, ich wollte nur den saubersten Weg dafür finden, und das ist wohl die enum-Methode.

Danke für die Antworten.