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?
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
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.
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...
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
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...
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.