2010-11-07 30 views
1

我有一个非常大的数组(GLfloat类型的96,000个元素)。这是以前的24000个元素,直到我做了一些改变。现在我正在崩溃。我还没有做太多的调试,但是当我注意到我的一个阵列有多大的可笑性时,我认为这可能值得研究。所以,我唯一的问题是96000个元素(或384,000个字节)对于单个阵列是否太多了?iPhone上的目标C中的最大数组大小?

+1

任何代码?坠机事件说了什么? (EXC_BAD_ACCESS?) – kennytm 2010-11-07 08:05:39

+0

数组在哪里/如何分配? (例如,它是堆栈还是堆分配的问题?)另外,您需要确保32位变量来表示索引(可能是〜24k的微妙变化)。 – 2010-11-07 08:10:34

+0

第一次坠毁我得到了“接收到的记忆警告,等级= 1”。然后是EXC_BAD_ACCESS。第二次我只收到内存警告,没有错误的访问,但它仍然以同样的方式崩溃。该数组是全局分配的并且是非动态的。分配时崩溃不会发生,它会在稍后使用大部分元素时发生(我使用32位整数访问索引,因此不应该是问题)。 – Parker 2010-11-07 08:54:05

回答

1

数组大小没有上限,保存设备上可用RAM的数量。

2

这应该罚款堆,但你应该避免在堆栈上分配的大小。因此,您应该使用malloc/freenew[]/delete[]创建并销毁该大小的数组。

如果设备的内存不足,您可以期待大量内存的请求偶尔返回NULL。有些应用程序(如照片/图像处理)要求分配数十兆字节 - 比384 KiB分配要多很多倍。

+0

对于那些与我不熟悉objc/C++/c的人来说:用double * data = new double [count];替换double数据[count];' – 2016-07-25 22:14:05

0

我不认为它太大。一些图像资源会占用那么多或者更多的连续空间而没有问题。例如,一张400x400像素的图片需要大约160,000 * 4 = 640,000字节的内存。我认为问题在别的地方。