【发布时间】:2017-09-05 08:17:33
【问题描述】:
我正在构建一个以 Newlib 2.5.0 作为目标 C 库的 arm-eabi-gcc 工具链。
目标嵌入式系统更喜欢较小的代码大小而不是执行速度。如何配置 newlib 以支持更小的代码大小?
默认构建会生成代码大小超过 1KB 的 strstr 版本。
【问题讨论】:
-
您如何确定
strstr的大小?如果它真的那么大,我会感到惊讶。例如,目标文件的大小不能衡量代码大小。 -
请注意,有时使用 -O2 编译会产生比 -Os 更小的二进制文件,只需尝试不同的编译器选项,直到你得到你想要的,和/或实现你可能想要使用的超级通用函数,你可以写一个可能要小得多的特定的。
-
@Clifford 查看最终可执行文件的链接器映射
-
@M.M :好吧,我猜它有那么大!在问题中指定 Newlib 的版本可能很有用。如果您查看源 strstr.c,则有两种实现;
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)启用的更简单/更小。请注意,对于长字符串,它也会显着变慢,但如果您担心代码大小,也许也可以避免使用长字符串?
标签: arm embedded gnu-toolchain newlib