QVector的内存分配策略

QArrayData *QArrayData::allocate(size_t objectSize, size_t alignment,size_t capacity, AllocationOptions options){// 检测aligment是否为2的阶数倍Q_ASSERT(alignment >= Q_ALIGNOF(QArrayData)&& !(alignment & (alignment – 1)));…// 获取 QArrayData 类为空时的大小size_t headerSize = sizeof(QArrayData);// 申请额外的 alignment-Q_ALIGNOF(QArrayData)大小的 padding 字节数// 这样就能将数据放在合适的位置上if (!(options & RawData))headerSize += (alignment – Q_ALIGNOF(QArrayData));// 如果数组长度超出容量则申请新的内存if (options & Grow)capacity = qAllocMore(int(objectSize * capacity), int(headerSize)) / int(objectSize);//一共需要申请的字节数size_t allocSize = headerSize + objectSize * capacity;QArrayData *header = static_cast<QArrayData *>(::malloc(allocSize));if (header) {…}return header;}

,在人生的道路上,谁都会遇到困难和挫折,

QVector的内存分配策略

相关文章:

你感兴趣的文章:

标签云: