首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Newlib针对代码大小进行了优化

Newlib针对代码大小进行了优化
EN

Stack Overflow用户
提问于 2012-03-03 00:01:18
回答 2查看 1.2K关注 0票数 2

在对内存非常敏感的嵌入式应用程序中,我注意到一些newlib函数使用了大量堆栈空间。通过查看newlib的源代码,特别是本例中的mem.c,我注意到了两个定义,PREFER_SIZE_OVER_SPEED和__OPTIMIZE_SIZE__,它们可以极大地减少内存使用。据我所知,这些都应该在编译newlib时定义,以便使用“针对大小进行优化”的库。由于我使用的是cortex-M3微控制器,有没有ARM工具链可以使用“针对大小进行了优化”的新库,或者提供使用它的选项,或者我应该尝试自己构建它。此外,在构建新的库时,我是否也应该构建GCC,或者我是否可以只构建库并使用我当前的工具链。目前,我正在使用CoIDE和他们提供的工具链。

EN

回答 2

Stack Overflow用户

发布于 2012-03-03 07:15:05

你只需要构建这个库,而不是编译器。

然而,我希望任何大小优化都与代码大小相关,而不是堆栈大小。只有当自动变量的大小或数量减少时,堆栈大小才会减少,这通常是由所需的功能决定的,而不是算法的优化。

票数 1
EN

Stack Overflow用户

发布于 2012-03-04 04:10:43

您使用的memmem不是标准函数。它是glibc中的GNU扩展。您实际运行的代码在str-two-way.h中。我没有研究它,但它说它是一个像Boyer-Moore一样的亚线性字符串搜索,并将您指向关于Boyer-Moore的维基百科文章。当然,这会产生一些内存成本。

因为它甚至不是一个标准函数,所以如果您不喜欢newlib的实现,就没有理由使用它。只需使用您自己的子字符串搜索函数。如果你知道二次时间足够好,只需在你自己的代码中使用mem.c中的5行循环即可。您可能希望检查memcmp是否正确地执行了wrt未对齐加载(如果您的体系结构支持这些加载)。如果没有,手动嵌套循环可能比调用memcmp更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9536403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档