2010-11-07 45 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字節的內存。我認爲問題在別的地方。