【问题标题】:Memory usage examination内存使用检查
【发布时间】:2016-07-04 09:57:55
【问题描述】:

我有一个使用 arm-none-eabi-gcc 编译的嵌入式应用程序,我遇到了大内存使用问题。

使用arm-none-eabi-nm 我可以找出为某个对象分配了多少内存。但是当这个对象是类实现时,我不知道有多少内存使用类的每个成员。怎么知道?

很难为每个成员调用sizeof(),因为有很多类成员,并且没有嵌入式应用程序的控制台。

【问题讨论】:

  • 您可以从链接器分析扩展列表(使用静态用法)。对 uP 最流行的误解是常量(如果以特定方式声明的注释)从闪存复制到 RAM。
  • 我不清楚。既然您标记了您的问题c++,但您在谈论gcc,您能否发布这些“类实现”的示例并说明这些成员是如何分配的?
  • X 类大小 { char * buf; } 在运行时对 RAM 的使用几乎没有影响。一般很难帮助你,没有代码
  • @JacekCz 我敢让你编译 class X { char * buf; }arm-none-eabi-gcc... ;)
  • 链接器通常会输出一个映射文件,它通常会为您提供程序分配的每一件事的所有详细信息。

标签: c++ gcc embedded


【解决方案1】:

检查链接器生成内存映射文件。主要是“.map 扩展名”。

在许多 IDE 中默认禁用,因为此链接器不会生成此文件,在这种情况下您必须从项目设置中启用它。

【讨论】:

  • 假设您找到了 .map 文件,您将如何处理它?是否只是一个包含对象列表及其大小的文本文件?
  • 通常地图文件会提供有关为每一件事(代码、数据、类、变量)分配的内存的所有详细信息(大小、名称、位置、部分)。
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多