gpt4 book ai didi

C++ 创建巨大的 vector

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

对于我尝试运行的进程,我需要一个 std::vectorstd::tuple<long unsigned int, long unsigned int> .我现在正在做的测试应该创建一个包含 47,614,527,250(约 470 亿)个元组的 vector ,但实际上在创建时崩溃并出现错误 terminate called after throwing an instance of 'std::bad_alloc' .我的目标是将此脚本与大约两倍大小的 vector 一起使用。代码是这样的:

arc_vector = std::vector<std::tuple<long unsigned int, long unsigned int>>(arcs);

哪里arcslong unsigned int与引用值。

我可以增加内存大小吗?在那种情况下我该如何增加内存大小?该脚本在具有大约 200GB 内存的 40 核机器上运行,因此我知道内存本身不是问题。

最佳答案

470 亿个元组乘以 16 个字节,每个元组为 7800 亿字节,大约为 760 GB。您的机器只有不到所需内存的 1/3,因此无论程序崩溃的原因如何,您确实需要另一种方法。

我可以给你的一个建议是使用 1TB 的内存映射文件来存储该数组,如果你真的需要使用 vector 作为接口(interface),你可以为它编写一个使用映射内存的自定义分配器。那应该以准透明的方式解决您缺少主内存的问题。如果您的接口(interface)需要标准 vector 和标准分配器,您最好重新设计它。

要补充的另一点是,检查您为运行该进程的用户设置的 ulimit 值,因为它可能有比 760 GB 更严格的虚拟内存限制。

关于C++ 创建巨大的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175664/

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