为什么iostream在MCU上占用这么多闪存空间?

Venemo

我使用GCC 5.2.0编译EFM32 MCU(基于Cortex-M内核)的代码。当我想要时,我注意到代码的大小急剧增加#include <iostream>

例如,让我们为EFM32WG“ Wonder Gecko”芯片编译以下代码:

#include "em_device.h"
#include "em_chip.h"
#include <iostream>

int main(void)
{
  CHIP_Init();

  while (1) {
  }
}

此代码将产生172048字节的代码,而没有#include <iostream>它则只有1440字节。

我通常只cout用于调试输出(通过实现_writenewlib功能并将输出路由到SWO引脚),但是考虑到MCU仅具有256k闪存,并且仅包括此标头,这种方法看起来非常浪费。代码用尽了大部分。

因此,我的问题是:为什么包括iostream标头会使编译后的代码占用如此疯狂的闪存空间?而且,有没有办法解决它?

编辑:

编译器和链接器均为arm-none-eabi-g++5.2.0版,C库为nano C库(我认为)。

这是我的C ++编译器标志(不包括include路径):

-g -gdwarf-2 -mcpu=cortex-m4 -mthumb '-DEFM32WG940F256=1' -O0 -Wall -c -fmessage-length=0 -mno-sched-prolog -fno-builtin -ffunction-sections -fdata-sections -mfpu=fpv4-sp-d16 -mfloat-abi=softfp

这是我的链接器标志:

-g -gdwarf-2 -mcpu=cortex-m4 -mthumb -T "${BuildArtifactFileBaseName}.ld" --specs=nosys.specs -Xlinker --gc-sections -Xlinker -Map="${BuildArtifactFileBaseName}.map" -mfpu=fpv4-sp-d16 -mfloat-abi=softfp --specs=nano.specs

我尝试了优化和不优化,但是最终的代码大小保持不变(优化后的大小可能小了1k)。

编辑2

-fno-rtti并且-fno-exceptions也不帮助提供代码大小。

尼古拉

尽管编译器确实尝试消除了未使用的完整包含或部分包含,但这有时会失败。仅仅包含一些头文件就导致代码运行-这意味着即使您未引用头文件中包含的任何内容,编译器也无法从其中删除代码。

<iostream>就是这样一个例子,它声明了一些全局对象,这些对象的构造函数在调用main之前运行。它的包含将使STM32的二进制大小大致增加140kB。

您可以在github上检查gcc开发人员的这种行为和推理

解决方案是避免在微控制器上使用C提供的打印功能,例如printf()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扫描为什么要占用这么多空间?

来自分类Dev

为什么Grunt / Gulp插件占用这么多空间?

来自分类Dev

为什么/ lib / modules在xubuntu上占用了这么多空间?

来自分类Dev

为什么/ lib / modules在xubuntu上占用了这么多空间?

来自分类Dev

什么是`/home/.ecryptfs`,为什么它占用这么多空间?

来自分类Dev

Clojure:为什么此编写器会占用这么多堆空间?

来自分类Dev

为什么简单的程序会占用这么多的存储空间?

来自分类Dev

为什么简单的程序会占用这么多的存储空间?

来自分类Dev

为什么我的自托管wordpress网站占用这么多空间?

来自分类Dev

为什么XCode命令行工具占用这么多空间?

来自分类Dev

MPG文件为什么要占用这么多空间?它是过时的格式吗?

来自分类Dev

Cygwin杂物包为什么要占用这么多空间?

来自分类Dev

为什么我的UIImage占用这么多内存?

来自分类Dev

为什么我的UIImage占用这么多内存?

来自分类Dev

CentOS:为什么“ cma”进程占用这么多RAM?

来自分类Dev

IE为什么要占用这么多CPU?

来自分类Dev

为什么python字典会占用这么多内存?

来自分类Dev

Python:为什么等待线程占用这么多 CPU

来自分类Dev

我在Ubuntu中看到的这个特殊文件是什么,为什么占用这么多空间?

来自分类Dev

为什么 Django forms.TextField 占用这么多空间,即使文本输入区域很小?

来自分类Dev

为什么安装GnuCash需要这么多额外的空间?

来自分类Dev

PyCharm 和 Intellij 占用了这么多空间

来自分类Dev

为什么从文件读取的numpy narray会占用这么多内存?

来自分类Dev

为什么我的页表占用了这么多内存?

来自分类Dev

为什么<h3>和<p>之间有这么多空间

来自分类Dev

了解为什么我失去了这么多空间来安装新的HDD

来自分类Dev

在UITableView中使用“自动布局”,为什么周围有这么多额外的空间?

来自分类Dev

为什么我的浏览器在两边留下了这么多空间?

来自分类Dev

当我使用scipy乘以两个CSR矩阵时,为什么会占用这么多内存?

Related 相关文章

  1. 1

    扫描为什么要占用这么多空间?

  2. 2

    为什么Grunt / Gulp插件占用这么多空间?

  3. 3

    为什么/ lib / modules在xubuntu上占用了这么多空间?

  4. 4

    为什么/ lib / modules在xubuntu上占用了这么多空间?

  5. 5

    什么是`/home/.ecryptfs`,为什么它占用这么多空间?

  6. 6

    Clojure:为什么此编写器会占用这么多堆空间?

  7. 7

    为什么简单的程序会占用这么多的存储空间?

  8. 8

    为什么简单的程序会占用这么多的存储空间?

  9. 9

    为什么我的自托管wordpress网站占用这么多空间?

  10. 10

    为什么XCode命令行工具占用这么多空间?

  11. 11

    MPG文件为什么要占用这么多空间?它是过时的格式吗?

  12. 12

    Cygwin杂物包为什么要占用这么多空间?

  13. 13

    为什么我的UIImage占用这么多内存?

  14. 14

    为什么我的UIImage占用这么多内存?

  15. 15

    CentOS:为什么“ cma”进程占用这么多RAM?

  16. 16

    IE为什么要占用这么多CPU?

  17. 17

    为什么python字典会占用这么多内存?

  18. 18

    Python:为什么等待线程占用这么多 CPU

  19. 19

    我在Ubuntu中看到的这个特殊文件是什么,为什么占用这么多空间?

  20. 20

    为什么 Django forms.TextField 占用这么多空间,即使文本输入区域很小?

  21. 21

    为什么安装GnuCash需要这么多额外的空间?

  22. 22

    PyCharm 和 Intellij 占用了这么多空间

  23. 23

    为什么从文件读取的numpy narray会占用这么多内存?

  24. 24

    为什么我的页表占用了这么多内存?

  25. 25

    为什么<h3>和<p>之间有这么多空间

  26. 26

    了解为什么我失去了这么多空间来安装新的HDD

  27. 27

    在UITableView中使用“自动布局”,为什么周围有这么多额外的空间?

  28. 28

    为什么我的浏览器在两边留下了这么多空间?

  29. 29

    当我使用scipy乘以两个CSR矩阵时,为什么会占用这么多内存?

热门标签

归档