Qt QByteArray的内存布局是什么

Qt QByteArray的内存布局是什么,qt,qbytearray,Qt,Qbytearray,我试图找到QByteArray的内存布局(因为我必须与一个DLL接口,该DLL将QByteArray作为参数)。 从原始QT源中,我提取了以下内容: template <typename BaseClass> struct QGenericAtomicOps { }; template <int size> struct QBasicAtomicOps : QGenericAtomicOps < QBasicAtomicOps<size> > {

我试图找到QByteArray的内存布局(因为我必须与一个DLL接口,该DLL将QByteArray作为参数)。 从原始QT源中,我提取了以下内容:

template <typename BaseClass> struct QGenericAtomicOps {
};
template <int size> struct QBasicAtomicOps : QGenericAtomicOps < QBasicAtomicOps<size> > {
};
template <typename T> struct QAtomicOps : QBasicAtomicOps < sizeof( T ) > {
    typedef T Type;
};
template <typename T>
struct QBasicAtomicInteger {
    typedef QAtomicOps<T> Ops;
    typename Ops::Type _q_value;
};
typedef QBasicAtomicInteger<int> QBasicAtomicInt;
struct RefCount {
    QBasicAtomicInt atomic;
};
typedef void* qptrdiff;
struct QArrayData {
    RefCount ref;
    int size;
    UINT alloc : 31;
    UINT capacityReserved : 1;
    qptrdiff offset; // in bytes from beginning of header
};
template <class T>
struct QTypedArrayData
    : QArrayData {
};
struct QByteArray {
    typedef QTypedArrayData<char> Data;
    Data *d;
};
QByteArray
    QArrayData * Data; // pointer to the array-data struct.

QArrayData
    int ref; // the reference counter
    int size; // the used data size
    UINT alloc:31; // the number of bytes allocated
    UINT reserve:1; // unknown
    void* offset; // pointer to real data
这是正确的吗? 我特别想知道“偏移量”;通过查看代码,我得到的印象是,真正的数据是在偏移量之后直接开始的,并且是结构的一部分。实际数据在“ArrayData”头之前似乎也是可能的

因此“d”可以指向以下布局之一:

1. [ref|size|alloc|reserve|offset|--the real data--]
2. [--the real data--|ref|size|alloc|reserve|-offset]
这是正确的吗


Karl

Oops,刚刚注意到在布局摘要中,“offset”应该是“int”而不是“void*”。将对象传递到库的接口时有什么问题?了解布局的目的是什么?我必须与QT库接口,但不可能使用该库。最后,我通过在Win32 DLL中调用QT层下面的低级函数解决了这个问题。所以我仍然不知道QT阵列的布局,但现在已经没有必要了。这个问题现在可以解决了。正如我之前在评论中提到的,我找到了一种不用QT的解决方法。