运行时数据和代码内存大小估计

时间:2009-08-21 08:57:40

标签: c embedded memory-size

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

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

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

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

-Vikas

4 个答案:

答案 0 :(得分:1)

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

对于您自己的代码,大小差异将取决于:

  • 字长(即32位节目往往比8位更大/更多数据)
  • 架构(即英特尔代码与ARM,freescale,PIC)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

杰里米说,运行时间有点困难。除了他的建议,您还可以尝试gcov和/或gprof,以便在最常见的使用场景中分析您的程序。这种仪器专注于复杂性而非尺寸,但至少你会更清楚地知道在哪里集中记忆分析。

答案 3 :(得分:0)

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