本文的嵌入式编译器基于arm-none-eabi-gcc,构建文件基于Makefile。
- main.c不编写任何代码,保证实验的其他变量统一。源文件main.c:
- 优化等级固定为 -Og :
- syscalls.c 系统调用库函数文件参考:基于arm-none-eabi-gcc编译工具链的串口重定向printf
下面开始作实验对比:
-
实验一:全部显式启用 -u_printf_float 和 -u_scanf_float ,编译出的代码内存体积为23440B+464B=23904B。如下图所示:
-
实验二:只显式启用 -u_printf_float ,不显式启用 -u_scanf_float ,编译出的代码内存体积为15252B+464B=15716B。如下图所示:
-
实验三:只显式启用 -u_scanf_float ,不显式启用 -u_printf_float ,编译出的代码内存体积为18556B+464B=19020B。如下图所示:
-
实验四:关闭全部显式启用 -u_printf_float 和 -u_scanf_float ,编译出的代码内存体积为1108B+8B=1116B。如下图所示:
总结:
实验一 | 实验二 | 实验三 | 实验四 |
---|---|---|---|
-u_printf_float、-u_scanf_float | 只启用-u_printf_float | 只启用-u_scanf_float | None |
23904B | 15716B | 19020B | 1116B |
可以得到明显的结论:显式启用 -u_printf_float 和 -u_scanf_float 会增加将近 23904B - 1116B = 22788B ≈ 22.25KB 的代码体积。