gpt4 book ai didi

c++ - C++ 中超大数组的内存问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:22 26 4
gpt4 key购买 nike

您好,我有以下内容:

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

如您所见,我有一个非常大的 vector 数组。问题是我对数组中需要的元素数量没有先验知识,但我知道 1000 万个元素是我可以拥有的最大值。我尝试了两件事:

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

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

关于如何解决这个问题的任何想法。谢谢

最佳答案

access myArray many many times, which is resulting in memory leaks and the program crashing for large calculations

无论如何,您都应该修复这些错误。

the memory is kept in check but the program runs about 8 times slower

由于您已经对 vector 数组使用了动态分配,所以还不清楚为什么再动态分配一个东西会导致速度变慢。所以你也应该研究一下。

然后我会选择 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);
}
}
}
}
}

关于c++ - C++ 中超大数组的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688504/

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