0

私のxcodeプロジェクト(一般的な例の下)にいくつかの複雑なクラスがあり、ある種のデータサイズ制限に達したようです。必要な配列サイズが機能しません。配列サイズを縮小すると、コードは機能します (したがって、プログラミング エラーは発生しません) が、計画したサイズには小さすぎます。

インターネットを読んで、スタックサイズに問題があるに違いないことがわかりました。ほとんどの解決策は、「静的配列を動的配列に変換する」と言っています。

しかし、(1)多次元配列(複数の独立変数を監視し、各組み合わせが可能であるため、最大5〜10次元のものもあります)ではそれほど簡単ではなく、(2)ほとんどの配列は複数のクラスにネストされているため、さらに悪化します.

私はすでにデータを減らすことを考えていました

  • いくつかのインテリジェントな転置を使用して、long の代わりに int...
  • c (0-100%) の解像度を 10% のステップに変更します (したがって、[100] は [10] に減少します)。

しかし、一方でこれは全体的な結果を危険にさらす可能性があり、他方ではプロジェクトがまだ開始されているため、来月には大きくなります...この配列サイズの問題は遅かれ早かれ再発します...

ここでは、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;
}
4

1 に答える 1

1

スタック割り当ての代わりにヒープ割り当てを使用できますか?

提案されているように、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
于 2016-03-12T19:21:52.373 に答える