[Development] Changing container privates again

Olivier Goffart olivier at woboq.com
Sat Jun 9 19:15:09 CEST 2012


On Saturday 09 June 2012 17:45:01 Thiago Macieira wrote:
> Hello
> 
> Moving the discussion from the series of patches I've begun on Gerrit to the
> ML.
> 
> tl;dr: all I wanted was to add the prepend optimisation to QVector so I
> could work on QList. Then João told me of a request by Tor Arne about
> letting QString have a "notify of destruction" function. So I changed the
> internals of QArrayData again.


I suggest re-ordering the offset in order to avoid padding.

struct Q_CORE_EXPORT QArrayData
{
    QtPrivate::RefCount ref;
    uint flags;
    qptrdiff offset; // in bytes from beginning of header
    int size;       // ### move to the main class body?
    // 4 byte tail padding on 64 bits

};
// size is 16 / 24 bytes (but really 20 bytes as we could use the tail padding 
to put the payload already)


struct QArrayAllocatedData : public QArrayData
{
    uint alloc;
};
// size is 20 / 24 bytes  (the tail padding bytes are used)


struct QArrayForeignData : public QArrayData
{
    void *token;
    void (*notifyFunction)(void *);
    // size is 24 / 40 bytes
};





More information about the Development mailing list