QHash源码解读

文章详细介绍了QT库中QHashData结构的内部实现,包括QHashData的成员变量和相关操作,如字节对齐的内存分配与释放,分离辅助函数detach_helper,以及涉及内存优化的重哈希函数rehash。QHashNode的结构设计确保了键值对的存储效率,且在哈希冲突时能有效处理。重哈希过程仅需一次内存分配,提高了性能。
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值