У меня возникла исключительная ситуация, связанная с переполнением стека.Чтобы было ясно, у меня нет рекурсивной функции, которая может привести к взрыву стека.Хотя где-то в моем приложении я создаю огромный массив с помощью 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, и я также не хочу увеличивать размер стека вручную, так как ручное использование более 1 МБ решит проблему, но это будет рискованно и, возможно, с ошибками.
Заранее спасибо.
Редактировать
Я только что проверил его в Linux, и он отлично работает там.Возможно, потому что я думал, что размер стека для linux составляет около 8 МБ, учитывая также и Virtual.Но тьфу!Это сделает приложение менее дружественным к кроссплатформенным приложениям, если я не собираюсь использовать его для диапазона стеков Windows по умолчанию.