我正在开发一个项目,C编程语言,开发一个应用程序,可以移植到许多不同的微控制器平台,如ARM \ Freescale \ PIC微控制器。我现在正在Linux上开发这个应用程序,然后我将把它移植到上述平台。
我想知道,是否有任何工具(最好是开源),在将其移植到新平台之前,我可以使用它来确定“代码”和数据内存占用量/大小。
我一直在搜索“谷歌”,到目前为止还没有找到任何东西,甚至连Linux都没有。
你的任何帮助都会对我有很大的帮助。
-Vikas
答案 0 :(得分:1)
对于小程序,大部分大小由程序所依赖的库/ DLL决定。由于您参考了ARM / Freescale / Pic,我假设您正在处理紧凑的嵌入式应用程序,其中数据大小以字节而不是MBytes来度量。
对于您自己的代码,大小差异将取决于:
在您的情况下,我希望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)
您的编译器可以/将生成一个映射文件。一般来说,地图文件将具有代码和数据大小(或位置范围)。不同目标的不同编译器之间可能存在差异。正如此处其他帖子所指出的,您对提供的库的依赖性也会影响整体内存使用。