C++0xC0000005:试图生成大向量[180][360]
C++ 0xC0000005: Trying to make large vector[180][360]
我很难让我的计算机分配大量内存(在我机器上的32GB以内)。我在Visual Studio 2015中,在64位计算机上以x64的形式运行目标,所以应该没有内存限制。
最初我尝试制作vector<int> my_vector[4][180][360]
,结果导致堆栈溢出。
根据VisualStudio调试器的说法,内存使用量不会超过70MB,所以我很好奇内存问题是如何发生的。计算机上的内存使用量保持在25GB以上。
有没有任何方法可以在没有内存问题的情况下声明vector<int> my_vector[4][180][360]
这样的数组向量?到目前为止,我只能达到v[180][180]
那么高。我的大多数向量都只有很少的元素。非常感谢您的帮助,谢谢。
static std::vector<int> my_vector[4][180][360]; for (int i=0; i < 4; i++) for (int j=0; j < 180; j++) for (int k=0; k < 36; k++) my_vector[i][j][k].resize(90000); my_vector[1][2][3][4]=99;
这在我的24gb机器上通过创建虚拟到磁盘来工作。但它很可能会很慢。您最好为磁盘文件编制索引。
您还可以使用std::map创建稀疏数组>
static std::map<int,int> my_map[4][180][360]; my_map[1][2][3][4]=99;
是否在堆栈上分配内存?如果是这样的话,我相信在出现堆栈溢出错误之前是有限制的。对于Visual Studio 2015,我认为默认的堆栈大小是1MB。
对于较大的数组,您需要使用new关键字在堆上分配它们。
如果您试图分配一个多维数组,它可能会变得相当复杂。二维整数数组被动态分配为指针的数组,每个指针都被分配给新的整数数组。在一个幼稚的版本中,您将需要一个循环来分配(并最终解除分配):
int **a= new int*[1000];
for (i = 0; i< 1000; i++) {
a[i] = new int[1000];
}
正如您所看到的,多维变得更加复杂,并且会占用额外的内存来存储指针。但是,如果您知道元素的总数,您可以只分配一个数组来存储所有元素(对于我的1000x1000示例为100000),并相应地计算每个元素的位置。
我把剩下的留给你去想。。。
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 为什么我不能返回向量<向量<int>>(进程返回 -1073741819 (0xC0000005))
- C++0xC0000005:试图生成大向量[180][360]