gpt4 book ai didi

c++ - QHash存储大量数据

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:09 25 4
gpt4 key购买 nike

我有 10,000,000 个类型为 struct{int, int, int, int} 的条目。当我使用 QHash 存储它们时或 QMap , 占用内存大, 确实要占用

10,000,000 * 4 * 4 (sizeof integer) <= 153 MB

但是当我加载我的数据时,QHash 和 QMap 都需要大约 1.2 GB,为什么会发生这种情况以及我如何优化它的速度和内存?(通过任何其他数据结构或一些技巧到 qmap 和 qhash)

最佳答案

你在评论中说过你正在使用另外四个整数作为键——这些值也必须被保存,所以你实际上存储了 8 个整数,而不是 4 个。除此之外,QHash 必须存储值哈希以根据键有效地查找值。散列是一个无符号整数,所以你有 9 个值,每个 4 个字节长。总计约 350 MB。

此外,在内部 QHashQMap 可能会在其元素之间使用一些填充,例如以满足 data structure alignment requirements .填充是 1 字节的乘数,这意味着如果有 1000 万个元素,我们可能会至少增加几十兆字节。

此外,QHashQMap 不仅仅是原始数据——它们都使用额外的指针指向它们的内部数据结构等,这也是为什么单一条目的另一个原因会占用比您预期更多的空间。

数据大小膨胀的另一个来源可能是出于效率原因,这些类可能会存储一些额外的值,以便在您调用它们的某些方法时预先计算它们。

最后但同样重要的是,QHash 出于效率原因(避免不必要的复制)在任何给定时刻保留比其当前元素所需的更多内存。我希望大小越大,它会保留越多的内存以防万一,因为复制变得更加昂贵。您可以通过调用capacity()方法查看预先预留的内存。如果您想限制保留的内存量,请调用 squeeze() 方法来调整内存,使其刚好足以包含当前存储的元素。

关于c++ - QHash存储大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com