C++ 数组的堆栈溢出数组
我正在计算一些值,并使用如下函数将它们存储在变量中:C++ 数组的堆栈溢出数组,c++,arrays,visual-studio-2010,function,declaration,C++,Arrays,Visual Studio 2010,Function,Declaration,我正在计算一些值,并使用如下函数将它们存储在变量中: array<array<double,1000>,1000> index; sum(double A, ..., array<array<double, 1000>,1000> & index); 知道如何解决这个问题吗?默认情况下,Win32中的每个线程都有1MB的堆栈空间,一百万个双倍线程将占用8MB的堆栈空间。解决方案是使用new从堆中分配它们。由于没有将指向“index”的指针
array<array<double,1000>,1000> index;
sum(double A, ..., array<array<double, 1000>,1000> & index);
知道如何解决这个问题吗?默认情况下,Win32中的每个线程都有1MB的堆栈空间,一百万个双倍线程将占用8MB的堆栈空间。解决方案是使用
new
从堆中分配它们。由于没有将指向“index”的指针传递给平均值函数,因此对象(即数组)将在堆栈上重建(复制)。
我不知道默认情况下堆栈的大小是多少,但您仅为阵列使用了~8MB,这是一个坏主意。以2d方式声明1000 x 1000 double的动态方法(避免堆栈溢出)是
std::vector<std::array<double,1000>> index(1000);
std::向量索引(1000);
-编辑-
正如迈克·西摩在评论中所说的那样。荣誉应该给予的人的荣誉…;)
索引的类型是std::vector
,因此您需要这样的参数
void average (..., std::vector<std::array<double,1000>> & index, ...)
void average(…,std::vector&index…)
好的,让我们组装所有部件:
- sizeof(数组,1000>)约为8MB
- 通常的堆栈较小,所以当
- 创建这样一个局部变量
- 按价值传递
vector
,立即获得整个大小 我使用一个对象(Model Model=newmodel;
)来存储一些向量(数组)
float fc1[input_dim][hidden_layer_dim_1]={0.0};
浮动fc2[隐藏层尺寸1][隐藏层尺寸2]={0.0};
浮点fc3[隐藏层大小2][output大小]={0.0}代码>
我得到这个错误是因为尺寸有点大:)。我用这个变化解决了这个问题:
模型代码>->型号*型号=新型号代码>
当我使用指针时,问题就解决了。当然,变量也会随之发生变化:
model.hidden\u layer\u dim\u 1
->model->hidden\u layer\u dim\u 1
因此,解决方案是选择动态数组。在这种情况下,如何使用新的数组编写数组?@MelMed:我建议向量索引(1000)
直接使用new
通常是个坏主意。@MelMed:解决方法是改变平均值函数以接收指针。为什么是new?为什么不使用vector?请记住>
在C++98上不起作用,以防OP使用它。您需要>
@BalogPal您的意思是平均值采用的是索引(通过值)而不是&index(通过引用,这可能与常量&)有关吗?以及如何在双for循环中访问此类变量?我曾经用数组A[I][j]做过,现在呢?@MelMed使用操作符[]
将返回一个对std::array
的引用,该数组反过来可以使用操作符[]
访问,每个操作符提供一个双元素。因此,您仍然可以使用索引[i][j]
访问元素。这将继续工作。您甚至可以快速交换()。但您可能会受到意外调整大小()的影响。
std::vector<std::array<double,1000>> index(1000);
void average (..., std::vector<std::array<double,1000>> & index, ...)