2010-03-13 87 views
4

iPhone上的可執行文件或可執行文件+共享對象的最大大小是多少?我一直在開發一款應用程序,該應用程序在啓動或早期使用SIGSYS執行時已崩潰。從程序中刪除代碼已經有所幫助,雖然結構化數據,所以代碼根本就不執行。iPhone上的最大可執行文件大小?

這可能是某種內存損壞,但是當我用-Os而不是-O2或-O3進行編譯時,我的可執行文件的大小從5.15MB下降到3.60MB,並且應用程序運行良好。當然,我也有一堆庫。

我在想,iPhone上的可執行代碼的大小是否有限制?或者當我使用-Os時,我只是'幸運'並掩飾內存損壞?

回答

0

您可能只是內存不足。你是否收到記憶警告?

+0

我沒有用完內存。當我用-Os進行編譯時,我可以在程序中獲得足夠多的信息來加載許多兆字節的數據。我之前已經耗盡內存,但是隻有在加載之後纔會比這更多。 – Sirp 2010-03-13 18:38:44

+0

在這種情況下,我將不得不同意@marcc;你的bug在其他地方,你很幸運。 – 2010-03-13 19:15:28

2

如果存在最大尺寸,則無法使用5.15或3.60 MB應用文件進行打擊。你的應用程序中有一個不同的錯誤。

你越來越幸運了。

0

有一個最大的可執行文件大小通過應用程序商店傳遞,但硬件本身沒有施加任何異常的限制。

您的問題很可能發生在您的某個庫中。根據你對應用程序複雜性的描述,對我而言,這不是一個有用的觀察。

鑑於帶有編譯器選項的模式,我將採取一種瘋狂的猜測,即您有一個存在問題的庫,而緊密的編譯會導致該代碼被排除。

在longshot的標題下,您可能還需要查看圖像等資源。在過去的幾年中,我見過幾起案例,其中看似無害的資源在裝載時會觸發致命錯誤。

0

我遇到了完全相同的問題。在幾十或幾百個C++ kloc中,我從來沒有遇到任何問題。現在我基本上覆制&粘貼一個類並重命名了兩個按鈕,並在啓動時出現訪問衝突。

沒有一個新的代碼被執行,只是鏈接進去,因爲我得到了一個函數的地址。新鏈接的編譯單元不依賴於可能導致後臺代碼執行的外部單個靜態符號。

調試器沒有指向有用的位置。我的可執行文件大約在3.6 MB。