手臂拇指模式:代码大小不减小
-
29-09-2019 - |
题
伙计们,我有一个我为ARM Cortex-A8处理器编辑的项目。我正在利用海湾合作委员会来做到这一点。目前,我的可执行文件的大小为220.1 kb。现在我修改了makefile,然后添加标志 -mthumb
, ,Makefile线看起来有些像这样 -
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
我对所有makefiles进行了更改,并构建了我的项目,但是可执行的我终于仍然仍然是220.1 kb。
我对我的命令行进行了一次更改,我添加了-Mthumb -interwork选项
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
我再次获得相同尺寸的可执行文件220.1 kb。我在这样做时是否错过了什么?
我写了一个小程序,以找到两个数字中的最小程序,然后使用以下命令行对其进行了编译
gcc main.c -o main
我得到8.5 kb的可执行文件
接下来,我做一个
gcc -mthumb main.c -o main
我仍然得到8.5 kb的可执行文件。
这里怎么了?
我做了一个 cat /proc/cpuinfo
看看拇指是否得到了我的处理器的支持,我看到它确实得到了支持。我得到 -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
解决方案
我认为-Marm意味着您有一只没有拇指的手臂,请尝试删除-Marm。
其他提示
没有实际的代码很难说,但是我有一些建议。
- 启用优化。 (例如-O3-赋予段-FDATA区)
- 剥离可执行文件以确保不计数调试信息。
- 检查实际的代码(.TEXT)大小,而不是文件大小。也许正在进行一些填充。您可以为此使用objdump。
- 丢弃装配代码(-s开关),并检查它实际上在一种情况下会产生ARM指令,然后在另一种情况下进行拇指。
使用一些编译器,拇指是编译ARMV7时的默认值。您确定您的原始可执行文件不是为了拇指而构建的吗?
尝试使用-mno -thumb构建,看看代码大小是否增加。
不隶属于 StackOverflow