gpt4 book ai didi

c++ - Vector 有 2 亿个项目

转载 作者:太空狗 更新时间:2023-10-29 20:26:39 25 4
gpt4 key购买 nike

这是我的结构

struct Node
{
int chrN;
long int pos;
int nbp;
string Ref;
string Alt;
};

为了填充我通过文件读取的结构,并将我的兴趣变量解析为结构,然后将其推回 vector 。问题是,大约有 2 亿个项目,我应该将它们全部保存在内存中(以备后续步骤使用)!但程序在推回 5000 万个节点后终止,出现 bad_allocation 错误。

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

四处搜索让我觉得我的内存力不足了!但是 top 的输出显示 %48(当终止发生时)

可能有用的附加信息:我将堆栈限制设置为无限并且我正在使用具有 4Gb RAM 的 Ubuntu x86_64 x86_64 x86_64 GNU/Linux。

欢迎任何帮助。

更新:

第一次从 vector 切换到列表,然后将每个 ~500Mb 存储在文件中并为它们建立索引以供进一步分析。

最佳答案

vector 存储是连续的,在这种情况下,需要 200 mio * 结构字节的大小。对于结构中的每个字符串,可能 都需要另一个小分配来保存该字符串。总之,这不适合您的可用地址空间,并且没有(非压缩)数据结构可以解决这个问题。

vector 通常会以指数方式增长其支持容量(这会分摊 push_back 的成本)。因此,当您的程序已经使用了大约一半的可用地址空间时, vector 可能会尝试将其大小加倍(或增加 50%),然后导致 bad_alloc 并且它没有释放之前的缓冲区,所以最后的内存似乎只有 48%。

关于c++ - Vector 有 2 亿个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030551/

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