Seite 1 von 1
Speicherbedarf QBitArray
Verfasst: 9. September 2009 10:11
von archon
Hallo Leute,
mal eine kurze Frage zu dem QBitArray: Ist dieses Konstrukt im Hintergrund so etwas wie ein bool Array (c++)? Wenn ich z.B. 20 Elemente habe benötige ist dann wirklich für jedes Element 1 Byte (hier also 20 Bytes) oder ist es in Qt so realisiert das wirklich jedes Bit genutzt wird und das letze byte dann z.B. nicht ganz genutzt wird (hier im letzten Byte 4 Bit)?
Gruss
Verfasst: 9. September 2009 10:45
von Curtis Newton
Schau Dir doch mal qbitarray.cpp an. Es scheint mir, die zweite Variante trifft zu.
Verfasst: 9. September 2009 11:35
von archon
hier der std Konstruktor
Code: Alles auswählen
QBitArray::QBitArray(int size, bool value)
{
if (!size) {
d.resize(0);
return;
}
d.resize(1 + (size+7)/8);
uchar* c = reinterpret_cast<uchar*>(d.data());
memset(c, value ? 0xff : 0, d.size());
*c = d.size()*8 - size;
if (value && size && size % 8)
*(c+1+size/8) &= (1 << (size%8)) - 1;
}
d ist vom Typ QByteArray c vom typ uchar also so richtig schlau werde daraus nicht mal weiter suchen
Verfasst: 9. September 2009 11:39
von Curtis Newton
Schau Dir doch z.B. mal clearbit an:
inline void QBitArray::clearBit(int i)
{ Q_ASSERT(i >= 0 && i < size());
*(reinterpret_cast<uchar*>(d.data())+1+(i>>3)) &= ~(1 << (i & 7)); }
Hier siehts man schön.
C.
Verfasst: 9. September 2009 13:31
von archon
Curtis Newton hat geschrieben:Schau Dir doch z.B. mal clearbit an:
inline void QBitArray::clearBit(int i)
{ Q_ASSERT(i >= 0 && i < size());
*(reinterpret_cast<uchar*>(d.data())+1+(i>>3)) &= ~(1 << (i & 7)); }
Hier siehts man schön.
C.
wenn ich jetzt mal nichts übersehe würde ich sagen das hier wirklich jedes einzelne Bit genutzt wird? Ich meine mit Rücksetzanweisung
wird ja ins byte reingeschaut