我尝试在iOS应用中使用float16_t
类型来节省内存空间。它似乎在设备上完美运行,但它不是在模拟器上构建的。
在模拟器构建中,它失败并带有
未知的类型名称' float16_t&#39 ;;你是说' float_t'?
float16_t
似乎在arm_neon.h中定义。
这可以修复,以便我可以在模拟器上使用该类型吗?
答案 0 :(得分:4)
很明显!
在float16_t
表示该类型严格用于基于ARM的CPU指令(特别是具有支持的NEON指令集的ARM CPU)。
到目前为止,所有iOS设备都在基于ARM的CPU上运行。因此,在为设备编译时,您的代码很好(尽管可能不会在没有NEON的旧版ARM设备中运行旧版本的cpus)。
但是,iOS模拟器在Mac上运行,它基于x86 / x64 CPU架构,而不是ARM。所以ARM类型在这里不起作用。
我不确定为什么你真的想要使用某些ARM NEON优化数据类型,如float16_t
,当float_t
工作得很好时,无处不在。但是如果您仍然想要使用它并希望您的应用程序在任何地方运行,您应该使用条件编译指令来编译代码:
#if TARGET_IPHONE_SIMULATOR
float_t x;
#else
float16_t x;
#endif
希望它有所帮助。