2016-01-01 4 views
2

Я попытался использовать тип float16_t в своем приложении iOS для экономии места в памяти. Кажется, что он отлично работает на устройстве, но он не строится на симуляторе.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» означает, что тип строго предназначен для инструкций CPU на основе ARM (в частности, процессоров ARM с поддерживаемым набором команд NEON).

До сих пор все устройства iOS работали на процессоре на базе ARM. Таким образом, ваш код хорош при компиляции для устройства (хотя, возможно, не будет работать в каком-то очень старом iOS-устройстве со старым ARM-процессором без NEON).

Однако iOS Simulator работает на Mac, который построен поверх архитектуры процессора x86/x64, а не ARM. Поэтому типы ARM просто не работают.

Я не уверен, почему вы действительно хотите работать с некоторыми оптимизированными данными ARM NEON типа float16_t, когда float_t работает отлично, везде. Но если вы все еще хотите использовать его и хотят, чтобы ваше приложение для запуска во всем мире, вы должны использовать условные директивы компиляции для компиляции коды:

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

Надеется, что это помогает.

Смежные вопросы