LOCAL_CFLAGS -mno-thumb的含义是什么?

时间:2013-05-15 08:28:23

标签: android-ndk

我知道LOCAL_CFLAGS是一组可选的编译器标志,在构建C源文件时会传递这些标志。我的问题是这个标志的意思是“-mno-thumb”或者我在哪里可以找到可用的LOCAL_CFLAGS列表以及它们的名称。

提前谢谢!!

2 个答案:

答案 0 :(得分:4)

LOCAL_CFLAGS选项位于Android.mk文件中,等同于编译器通常用于指定编译选项的常用CFLAGS

此类选项有,其中大多数的文档可以在this page from the GCC documentation的各个链接中找到。

对于-mno-thumb选项,它会停用大多数(最近的)ARM处理器上可用的Thumb可选指令集。该指令集比通常的ARM指令有限,更快更慢(编辑:查看whobertoos的回答)指令集,因此使用此标志禁用它可确保与更多(主要是旧的)处理器兼容,但是可能会使你的表现成为对手。

答案 1 :(得分:1)

mbrenon在他写的几乎所有内容中都是正确的。 但是,THUMB指令集比ARM指令集慢。它占用的空间更少,但速度更慢。

怎么样? 与手指相比,每个拇指指令占据一半的空间。这限制了每个指令可用的选项,例如参数,寻址模式等。这导致执行相同作业所需的更多指令,并且每条指令需要一个执行周期,因此减速。 据估计,ARM模式下的程序速度提高了30-40%,但THUMB模式下的程序占用的空间减少了30-40%。 Thumb是为内存限制系统而发明的。

Thumb模式也会影响外部存储器电量。

虽然在大多数情况下需要执行更多指令,但是可以在一个周期中获取两个指令。这是我对这个问题的理解。我不是百分百肯定,如果这是完整的答案。