1

我正在开发一个 C 编程语言项目来开发一个应用程序,该应用程序可以移植到许多不同的微控制器平台上,例如 ARM\Freescale\PIC 微控制器。我现在正在 Linux 上开发这个应用程序,然后我必须将它移植到上述平台。

我想知道,是否有任何工具(最好是开源的),在将其移植到新平台之前,我可以使用它来确定“代码”和数据内存占用\大小。

我一直在“谷歌”上搜索它,到目前为止还没有找到任何东西,甚至在 Linux 上也没有。

你的任何帮助都会对我有很大帮助。

-维卡斯

4

4 回答 4

1

对于小程序,大部分大小由程序所依赖的库/DLL 决定。由于您指的是 ARM/Freescale/Pic,我假设您正在处理紧凑的嵌入式应用程序,其中数据大小以字节而不是 MBytes 来衡量。

对于您自己的代码,大小差异将由以下因素决定:

  • 字长(即 32 位程序往往比 8 位更大/更多数据)
  • 架构(即英特尔代码与 ARM、飞思卡尔、PIC)

在您的情况下,我希望 PIC 是最关键的部分(对于 RAM/ROM 限制)。因此,在 PC 开发期间适当地监控 PIC 编译大小就足够了。链接器输出将包含有关 TEXT/DATA/BSS 大小的信息,您可以对其进行监控。

我通常在嵌入式系统上工作。在我的工作中,大部分数据大小在设计时是已知的(即缓冲区数 * 缓冲区大小)。对于代码大小,我有不同架构的经验法则,可以帮助我在设计时进行健全性检查。例如,我定义了一套现有的代码库,我知道每个架构的性能和大小数字。这样我就知道在设计时我可以期待什么样的比率。如果 PC 程序有 1 MB 的数据,它不适合 8 位 PIC ......

于 2009-09-22T09:01:31.907 回答
0

您的编译器可以/将生成一个映射文件。一般来说,地图文件将具有代码和数据大小(或位置范围)。不同目标的不同编译器之间可能存在差异。正如其他帖子中所指出的,您对提供的库的依赖也会影响整体内存使用情况。

于 2009-09-22T13:38:59.190 回答
0

文本/代码段的大小将取决于优化级别和后端。GCC 可以配置为为您生成该信息。

正如 Jeremy 所说,运行时有点困难。除了他的建议之外,您可能还想尝试gcov和/或 gprof 以便在您最常见的使用场景的上下文中分析您的程序。这种检测侧重于复杂性而不是大小,但至少您会更好地知道将内存分析的重点放在哪里。

于 2009-09-12T16:16:08.287 回答
0

没有什么能告诉您您的应用程序需要多少内存。您必须对如何使用它做出一些假设,并在不同的场景下尝试您的应用程序。

在测试时,您可以监控 /proc 文件系统中的内存使用统计信息,或使用 ps 命令来执行相同操作。

于 2009-08-21T18:40:28.243 回答