2017-09-16 39 views
2

如何檢測malloc是否快速失敗?如何判斷malloc是否在iOS上快速失敗?

最終目標是簡單地分配所需的空間量,如果ios無法分配它,請向用戶報告此優雅(而不是終止)。

當我嘗試下面的代碼,指針永遠是零,錯誤號總是0

let pointer : UnsafeMutableRawPointer? = malloc(fileSize) 
print("errno = \(errno)") 
if (pointer == nil) { 
    print("Malloc failed") 
} 
+0

如果'malloc'失敗,指針應該是'nil'。也許它在你的測試中從未失敗過? –

+1

你在哪個平臺上?在Linux上,您可能成爲「樂觀內存分配策略」的受害者:https://stackoverflow.com/a/7947888/1187415。 –

+0

平臺是ios。如果我嘗試通過其他方式分配相同大小的內存,它會故意大量地佔用內存。也許失敗發生在稍後的一些初始化過程中? – TJez

回答

1

你爲什麼用斯威夫特malloc,在所有?

let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: fileSize) 

更重要的是,在什麼情況下不讀文件需要你手動像這樣分配內存? Foundation提供了用於直接將文件讀入Data的API。

+1

你確定'allocate()'不會遭受同樣的問題嗎? - OP沒有提到讀文件。出於任何目的分配內存緩衝區可能有很多原因。 –

+0

因爲分配也沒有給出失敗的跡象。 – TJez

1

LLVM有一個優化,可以省去未使用的malloc調用。如果您的測試代碼從未實際需要分配,它將永遠不會執行。

相關問題