2016-01-01 107 views
2

我試圖在我的iOS應用程序中使用float16_t類型來節省內存空間。它似乎在設備上完美工作,但它不建立在模擬器上。iOS:float16_t在模擬器上不起作用

在模擬器建立與

未知類型名稱 'float16_t' 失敗;你的意思是'float_t'?

float16_t似乎是在arm_neon.h中定義的。

這可以修復,以便我可以在模擬器上使用該類型?

+0

我認爲你浪費你的時間,因爲保存的內存將可以忽略不計。將一個圖像添加到應用程序將佔用比使用此類型保存的空間更多的空間。更不用說它看起來不受支持/難以使用。 – trojanfoe

+0

也許是這樣。如果我在一段時間內沒有得到超級騙子的建議,我想我會退出。不過,我有點不清楚。我想在外部接口而不是內部存儲器上節省帶寬。但你可能是對的。也許我在浪費時間。 –

+0

在我所有的時間編碼中,我不認爲我曾經見過除了'float'和'double'以外的任何代碼中使用過的類型。 – trojanfoe

回答

4

非常明顯!

float16_t在「arm_neon.h」中聲明意味着該類型嚴格適用於基於ARM的CPU指令(特別是支持NEON指令集的ARM CPU)。

截止日期,所有iOS設備都運行在基於ARM的CPU上。因此,當爲設備編譯時,您的代碼是很好的(儘管如果沒有NEON,舊版ARM cpus可能不會運行在一些非常舊的iOS設備上)。

但是,iOS Simulator可以在基於x86/x64 CPU架構而不是ARM構建的Mac上運行。所以ARM類型在這裏不起作用。

我不確定爲什麼你確實想要使用一些ARM NEON優化數據類型,如float16_t,當float_t工作的很好,無處不在。但是,如果你仍然想使用它,並希望您的應用程序到處運行,你應該使用條件編譯指令編譯代碼:

#if TARGET_IPHONE_SIMULATOR 
    float_t x; 
#else 
    float16_t x; 
#endif 

希望它能幫助。

相關問題