У меня есть несколько сложных классов в моем проекте XCode (ниже общего примера)
и кажется, что я достиг своего рода предела размера данных.
Размеры массивов, которые мне нужны, не работают, если я уменьшу размеры массивов, код работает (так что никаких ошибок программирования), но он слишком мал для того, что я планировал.
Читая Интернет, я понял, что это должно быть проблемой с размером стека, и большинство решений говорят: «Преобразуйте ваши статические массивы в динамические».
но (1) это не так просто с многомерными массивами (некоторые до 5-10 измерений, поскольку они отслеживают несколько независимых переменных и возможна каждая комбинация)
и (2) большинство массивов вложено в несколько классов, что делает его еще хуже.
Я уже думал о сокращении данных
но, с одной стороны, это может поставить под угрозу общие результаты, а с другой — проект все еще находится в начале, поэтому он будет расти в следующем месяце … эта проблема с размером массива рано или поздно вернется …
здесь я обобщил код, показывающий 4-мерный массив (2x 2D).
Я думаю, что большинство профессиональных программ используют массивы, которые еще больше.
поэтому должен быть способ заставить это работать …
//.h
class StatisticTable
{
public:
long Array1 [100][50];
long Array2 [100][50];
long Array3 [100][140];
};
class Statistic
{
public:
void WriteStatistic(short Parameter_a, short Parameter_b,
short Parameter_c, short Parameter_d);
short ReadStatistic(short Parameter_a, short Parameter_b,
short Parameter_c, short Parameter_d);
private:
StatisticTable Table[16][8];
};
//.cpp
void WriteStatistic(short a, short b, short c, short d)
{
for (int i=0; i<d, i++) {Table[a][b].Array1[c][i]++;}
for (int i=d; i<50, i++) {Table[a][b].Array2[c][i]++;}
//write some more stuff
return;
}
Можете ли вы использовать выделение кучи вместо выделения стека?
Как и предполагалось, используя std :: unique_ptr:
auto const ptr = std::unique_ptr<StatisticTable>(new StatisticTable()).get(); // heap allocated and deleted automatically when obj goes out of scope
То есть
auto obj = new StatisticTable(); // heap allocation, allocate reference to new StatisticTable object on heap
// code
delete obj; // release heap allocated object
против
auto x = StatisticTable() // stack allocation
Других решений пока нет …