我有与堆栈溢出相关的异常。 需要明确的是,我没有递归函数,可能导致堆栈崩溃。尽管在我的应用程序中的某个地方,我正在使用std :: array创建一个巨大的数组,并且正在使用类模板。
我考虑过动态分配内存,但这是我最后要做的事情,也是在模板函数中,这导致我出现以下问题:
//class Template
template <class T, int Point, int End>
class Node;
private:
int Point;
int End;
std::array <T, Point*End>;
public:
// Rest of the stuff!
//Operator defined in class
//End of Node object1 is equal to Point of Node object2 always so;
template <int entry>
Node<T,Point,entry> operator* (const Node<T,End,entry> &source)
{
Node<T,Point,entry> temporary_node(0.);
//for_loop to multiply each element store in std::array
return temporary_node;
}
很重要的一点是,我的数组大小约为10000000。
如果我不想使用动态内存分配,怎么办?
如果我这样做,那我该如何在上面定义的*运算符中为临时节点动态分配内存,因为当我这样做时,它会占用向量的内存:
节点临时节点;
我在Windows上,并且我也不想手动增加堆栈大小,因为手动超过1MB可以解决此问题,但这样做可能会带来风险,甚至可能会引起问题。
谢谢。
我刚刚在Linux上对其进行了检查,并且在那里可以正常工作。也许是因为考虑到Virtual,我认为Linux的堆栈大小约为8MB。可是啊!如果我不考虑使该应用程序适用于Windows堆栈默认范围,则这将使该应用程序对跨平台的友好程度降低。
答案 0 :(得分:0)
您根本无法在堆栈上创建如此大的对象,而必须在堆上创建它们。
template <int entry>
std::unique_ptr<Node<T,Point,entry>> operator* (const Node<T,End,entry> &source)
{
auto temporary_node = std::make_unique<Node<T,Point,entry>>(0.);
//for_loop to multiply each element store in std::array
return temporary_node;
}