using MPI: C++ std::bad_alloc
using MPI: C++ std::bad_alloc
我正在使用超级计算机,使用MPI。但问题是……c++有一个程序,它打开文件的数据,并读取到vector<long>v1
//open file
...
vector<long>v1;
while (!f1.eof()){
//input data into
v1.push_back(s1);
}
好吧,当数据文件只包含5000万个"长数字"时,它工作得很好。但是,当数据文件包含超过7500万个"长数字"时,它就会异常失败:
std::bad_alloc();
如何改善这一点?
此外,使用多个处理器(超过100个)
不要使用矢量。vector要求它的所有元素都能容纳在连续的内存位置中,它不适合非常大的集合。使用正确的数据结构取决于您的访问模式,list
将工作,但它会浪费大量内存(每个long
存储两个指针)。也许您想要将long
s分成100个左右的组,并创建这些组的链表。同样,正确的答案取决于你实际的外部问题。
虽然我对超级计算机没有太多的经验,但我可以告诉您,std::bad_alloc应该只在系统资源耗尽时发生。
在这种情况下,您可能已经达到了计算机对堆施加的限制(从操作系统的角度来看,或者从物理的角度来看{最后是一样的}),因为您的向量将在堆上动态分配元素。
您可以尝试使用top
或类似的命令来监视您的资源使用情况,并根据您实际使用的情况检查您的系统设置。
另一个注意事项-如果你知道它将使用多少元素,你应该创建你的vector并调用reserve() -这将大大提高你的效率。
相关文章:
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 组件对象模型 (COM):IMalloc::Alloc 在哪里分配内存?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- 将 lambda 传递给 STL 集时出错"bad function call"
- 新的 C++14 位分隔符处"Bad Character" Eclipse Oxygen 错误
- 使用 #define 被认为是"bad practice"吗?
- "400 Bad request"使用 OpenSSL BIO 进行请求时
- CGAL:Hausdorff距离不良Alloc
- 解密文件AES_256_CBC返回"bad decrypt"错误
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- C STD ::初始化类对象中的Alloc错误错误
- make / gcc:"bad build"的可能原因是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 在多线程环境中,什么可能导致"bad file descriptor"?
- 尝试解决HackerBank上的BFS挑战时出现错误的alloc异常
- "std::vector"在调整大小时引发"bad allocation"异常
- 尝试使用 execp、dup2 和管道实现 shell,挂起或"bad file descriptor"