Speicherbedarf QBitArray

Alles rund um die Programmierung mit Qt
Antworten
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Speicherbedarf QBitArray

Beitrag 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
Curtis Newton
Beiträge: 122
Registriert: 11. Juni 2008 18:39

Beitrag von Curtis Newton »

Schau Dir doch mal qbitarray.cpp an. Es scheint mir, die zweite Variante trifft zu.
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag 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
Curtis Newton
Beiträge: 122
Registriert: 11. Juni 2008 18:39

Beitrag 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.
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag 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

Code: Alles auswählen

&=~(1 << (i & 7))
wird ja ins byte reingeschaut
Antworten