c/c++语言开发共享GCC – 如何阻止malloc被链接?

我正在努力将我的代码缩小到最小的裸骨大小! 我使用的STM32F0只有32k闪存,需要大部分闪存用于数据存储。 我的代码已经有大约20k的闪存大小! 其中一些原因是由于使用了STM32 HALfunction,我可以根据需要对其进行解释和优化。

但是,我最大的flash消费者是所有隐含的库例程。 我似乎无法删除这些function。 它们不会在我的代码或任何HAL代码中的任何位置调用。 诸如_malloc_r(1.3k字节)和__vfiprintf_r(3kB)以及许多其他function正在使用我的闪存的很大一部分。 我认为这些都是libc函数。 我不使用这些并希望它们消失!

有谁知道如何删除这些?

我尝试了不同的优化级别和链接器选项但到目前为止没有运气。 我试过-nostdlib和–specs = nosys.specs没有变化。 如果我删除我的文件与_exit等函数的定义我得到一个链接器错误,表明该库仍然包含在内,需要这些。 链接器映射也确认存在许多不需要的function!

有什么建议?

    解决了……我的一些代码包括在内并称为assert。 我删除断言的那一刻调用我的代码大小减半! 我改为使用STM32 HALs assert_param宏,它是一个轻量级断言,只是重定向到用户定义的函数。

    如果有人能够向我解释当调用assert时gcc如何决定包含库函数会有所帮助? 我看到assert.h声明了一个外部函数__assert_func。 链接器如何知道从库中引用它而不是仅仅说“未定义引用__asert_func”?

    当您想知道什么需要空间,或者为什么链接函数和库时,生成带有交叉引用的映射文件 – 类似于“-Wl,-Map = program.map, – cref”。 使用文本编辑器查看文件,您可以看到为什么包含了像malloc这样的函数。

      以上就是c/c++开发分享GCC – 如何阻止malloc被链接?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560714.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐