您好我有以下内容:
struct myStructure
{
vector<int> myVector;
};
myStructure myArray[10000000];
正如你所看到的,我有一个非常大的向量数组。问题是我没有先验知道我需要在阵列中拥有的元素数量,但我知道1000万个元素是我可以拥有的最大值。我尝试了两件事:
a)使myArray成为一个全局数组,但问题是我有一个多次访问myArray的函数,这会导致内存泄漏并导致程序崩溃以进行大型计算。
b)从需要访问它的函数内动态声明myArray,内存保持检查但程序运行速度慢了8倍。
有关如何解决此问题的任何想法。感谢
答案 0 :(得分:3)
多次访问myArray,导致内存泄漏,程序崩溃,无法进行大型计算
你应该在任何情况下修复这些错误。
内存被检查但程序运行速度慢了8倍
由于你已经在使用带有向量数组的动态分配,因此动态分配一个更多的东西会导致这种减速并不是很明显。所以你也应该研究一下。
然后我会选择一个vector<vector<int>>
,它不是全球性的,但具有适当的使用寿命
#include <vector>
#include <functional>
#include <algorithm>
using std::vector;
int main() {
vector<vector<int>> v;
for(int i=0;i<100;++i) {
std::for_each(begin(v),end(v),std::mem_fn(&vector<int>::clear));
foo(v);
for(int j=0;j<100;++j) {
std::for_each(begin(v),end(v),std::mem_fn(&vector<int>::clear));
foo(v);
for(int k=0;k<100;++k) {
std::for_each(begin(v),end(v),std::mem_fn(&vector<int>::clear));
foo(v);
for(int l=0;l<100;++l) {
std::for_each(begin(v),end(v),std::mem_fn(&vector<int>::clear));
foo(v);
}
}
}
}
}
答案 1 :(得分:0)
在对象中声明此结构,其生命周期保证超过访问它的对象并使用引用来访问此对象。理想情况下,您应该在层次结构中有一个类来调用处理此结构的所有函数,因此这些函数可能是您的大型向量数组的成员。
答案 2 :(得分:0)
您是否尝试将矢量数组转换为矢量矢量?毕竟,不知道你需要多少项目是什么向量。
我相信会是
vector<vector<int>> myVecs;
答案 3 :(得分:0)
使用不同的数据结构。我建议尝试像其中一个 sparse matrix classes from Boost。它们针对存储数字数据进行了优化,其中每行或每列包含大量的零。请注意,如果您尝试解决的问题不适合处理稀疏数据结构,那么最好详细说明您尝试解决的问题的性质。再看看https://stackoverflow.com/questions/how-to-ask,即使我猜你已经读过了。
但在你这样做之前,我认为你可能还有其他问题:
多次访问myArray,导致内存泄漏 程序崩溃进行大型计算
根据您在那里写的内容,我认为您的代码可能存在一些预先存在的错误。除非您的崩溃只是由于尝试将10000000元素数组分配为auto
变量而引起的。