XCode: 多维数组的堆栈大小限制
XCode: Stack Size Limit on Multidimensional Array
我的 xcode 项目中有一些复杂的 类(下面是一个通用示例)
看来我已经达到了某种数据大小限制。
我需要的数组大小不工作,如果我减少代码工作的数组大小(因此没有编程错误),但它对于我的计划来说太小了。
通过互联网阅读我发现这一定是堆栈大小的问题,大多数解决方案都说 "convert your static arrays to dynamic arrays"。
但是 (1) 使用多维数组并不那么容易(有些多达 5 到 10 个维度,因为它们监视多个自变量并且每个组合都是可能的)
和 (2) 是嵌套在几个 类 中的大部分数组,这更糟。
我已经想到要减少数据了
- int 而不是 long 一些智能换位...
- 将 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;
}
你能用堆分配代替栈分配吗?
按照建议,使用 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
我的 xcode 项目中有一些复杂的 类(下面是一个通用示例) 看来我已经达到了某种数据大小限制。 我需要的数组大小不工作,如果我减少代码工作的数组大小(因此没有编程错误),但它对于我的计划来说太小了。
通过互联网阅读我发现这一定是堆栈大小的问题,大多数解决方案都说 "convert your static arrays to dynamic arrays"。
但是 (1) 使用多维数组并不那么容易(有些多达 5 到 10 个维度,因为它们监视多个自变量并且每个组合都是可能的) 和 (2) 是嵌套在几个 类 中的大部分数组,这更糟。
我已经想到要减少数据了
- int 而不是 long 一些智能换位...
- 将 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;
}
你能用堆分配代替栈分配吗?
按照建议,使用 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