QT版本 v5.12.10
元素
// 重点说明QHashData的函数,QHashData是QHash的基础
struct QHashData
{
struct Node {
Node *next;
uint h;
};
Node *fakeNext; // 永为null
Node **buckets; // Node *数组
QtPrivate::RefCount ref;
int size; // node个数
int nodeSize; // node字节对齐后的大小
short userNumBits; // 用户设定的bit数,但不一定会取用
short numBits; // 位数,通过numBits可以计算出numBuckets的值,计算方法参考:http://oeis.org/A092131
int numBuckets; // 桶的总数量,为素数
uint seed; // hash计算时的种子
uint sharable : 1; // 是否共享,默认共享
uint strictAlignment : 1; // 是否字节对齐, 默认对齐
uint reserved : 30; // 保留字段
void *allocateNode(int nodeAlign);
void freeNode(void *node);
QHashData *detach_helper(void (*node_duplicate)(Node *, void *), void (*node_delete

文章详细介绍了QT库中QHashData结构的内部实现,包括QHashData的成员变量和相关操作,如字节对齐的内存分配与释放,分离辅助函数detach_helper,以及涉及内存优化的重哈希函数rehash。QHashNode的结构设计确保了键值对的存储效率,且在哈希冲突时能有效处理。重哈希过程仅需一次内存分配,提高了性能。
最低0.47元/天 解锁文章
793

被折叠的 条评论
为什么被折叠?



