2010-01-26 108 views
3

有時項目編譯的,有時它失敗Xcode的iPhone構建失敗,內存

「內存不足共計0字節後分配4072個字節」

如果項目編譯,當它在嘗試訪問第一個(已分配和保留的)對象時立即啓動一個錯誤的訪問異常,或者拋出錯誤「無法訪問內存地址xxxxxxxx」,其中xxxxxxxx是有效的內存地址。

有沒有人看到類似的症狀,並知道解決方法?

在此先感謝。

回答

2

如果編譯或鏈接失敗,出現內存不足的錯誤,它可能是兩個問題之一。

首先,你的引導驅動器或者您正在構建您的源上的可用空間的驅動器(它們可以是相同的驅動器)?如果不是,則當VM子系統嘗試映射文件時可能會出現該錯誤,或​​者更有可能在引導驅動器已滿的情況下,VM子系統嘗試爲交換空間分配更多驅動器。其次,你的應用程序絕對是巨大的嗎?即鏈接器是否因爲試圖組裝非常大的東西而失敗?

也有可能是系統中有一些壞RAM。儘管如此,不太可能,因爲症狀非常一致。

無論如何,沒有更多的細節,很難給出更具體的答案。

+0

謝謝bbum。這是我們迄今爲止發現的: 1) 每個{...}塊的大小都有一個上限。我們的應用超過了這個將其分解爲更小的塊可部分解決此問題。 2) 編譯器可以在單個類中編譯代碼時處理上限。此限制似乎與多少系統(開發平臺)內存可用有關。我們通過逐漸刪除大塊代碼並評論訪問它的任何內容來建立此目標。 – McPragma 2010-01-26 19:10:31

+0

通常不容易,但幸運的是我們的應用程序體系結構支持這一點。 3) 因此,我們將應用程序類分解爲更小的類。應用程序現在編譯並運行調試版本。但是,它不會編譯發佈版本,編譯器會發送如 內存不足,分配總共0字節後的1435327816字節 下一步將自行編譯每個類。剛剛報告說,這是行不通的。 這太可笑了。當一個較大的塊的一部分不能自行編譯時編譯的代碼。 這不好玩 – McPragma 2010-01-26 19:10:51

+0

BBum ...對不起...忽略回答你的問題。啓動驅動器具有大量的可用空間。應用程序不是巨大的...我們做得更大。壞RAM是可能的,但在其他應用程序中沒有其他症狀。再次感謝。 – McPragma 2010-01-26 19:20:34

0

我已經看到了這一點,它通常不是一個實際的內存錯誤(你的代碼)...

正在發生的事情是,你有你的Xcode目標生成設置「優化級別」設置爲快速,或更快,或者最快..

似乎是有一個錯誤的地方,將其設置爲無,或嘗試的操作系統,或O3(我不認爲是最快的影響)..

這很可能會解決這個線程中遇到的某些問題。肯定先嚐試「無」首先...這將確認這是發生在某人的情況下,看到這...

我可以告訴麥克拉格瑪肯定有這個問題,因爲他/她描述改變從調試到發佈,這導致它(調試已被設置爲無),併發佈設置爲別的東西......當是這種情況...確定它是特定的版本設置...