C ++中一个非常大的数组的内存问题

时间:2012-03-13 16:56:49

标签: c++ arrays

您好我有以下内容:

struct myStructure
{
 vector<int> myVector;
};
myStructure myArray[10000000];

正如你所看到的,我有一个非常大的向量数组。问题是我没有先验知道我需要在阵列中拥有的元素数量,但我知道1000万个元素是我可以拥有的最大值。我尝试了两件事:

a)使myArray成为一个全局数组,但问题是我有一个多次访问myArray的函数,这会导致内存泄漏并导致程序崩溃以进行大型计算。

b)从需要访问它的函数内动态声明myArray,内存保持检查但程序运行速度慢了8倍。

有关如何解决此问题的任何想法。感谢

4 个答案:

答案 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变量而引起的。