gio*_*ino 3 c++ memory memory-management bad-alloc c++11
对于一个过程,我试图运行我需要有一个std::vector的std::tuple<long unsigned int, long unsigned int>.我现在正在做的测试应该创建一个47,614,527,250(大约470亿)元组的向量,但实际上在创建错误时会崩溃terminate called after throwing an instance of 'std::bad_alloc'.我的目标是使用此脚本,其矢量大约是该大小的两倍.代码是这样的:
arc_vector = std::vector<std::tuple<long unsigned int, long unsigned int>>(arcs);
Run Code Online (Sandbox Code Playgroud)
带引用值的arcsa 在哪里long unsigned int.
在这种情况下,我可以增加内存大小吗?这个脚本运行在40核机器上,内存大小为200GB,所以我知道内存本身不是问题.
pqn*_*net 11
470亿元组乘以16字节每个元组是780亿字节,大约是760亿字节.你的机器所需的内存不到1/3,所以你真的需要另一种方法,无论程序崩溃的原因是什么.
我可以给你的建议是使用1TB的内存映射文件来存储该数组,如果你真的需要使用vector作为接口,你可以为它使用映射内存编写一个自定义分配器.这应该以准透明的方式解决你缺乏主存的问题.如果您的接口需要标准向量,使用标准分配器,则最好重新设计它.
要添加的另一点是,检查ulimit运行该进程的用户的值,因为它可能具有比760 gb更严格的虚拟内存限制.
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |