我有一个用C编写的静态库,没有动态内存分配。
到目前为止,该库仅用于常规i386 Linux的应用程序,其中CPU和内存非常丰富。
我现在需要尝试为嵌入式实时ARM9系统构建一个版本的库(由第三方提供)。在此之前,我必须粗略估计内存占用量和CPU使用率。
对于内存占用,我在i386机器上构建了一个小应用程序,静态链接到我的库,它可以运行我库的所有功能。检查此应用程序的常驻内存是否会让我对我的库的内存占用量进行估算是否大致正确?有没有更好的方法来衡量它?
为了估算CPU使用率,我感到茫然。我当然可以在我的i386系统上运行上面提到的测试应用程序,但我不知道会给我什么指标(如果有的话)可以转化成与ARM系统相关的东西。有办法吗?
答案 0 :(得分:2)
你的记忆估计对我来说听起来不错,只要你为ARM9编译它。实际上,如果您在没有调试信息的情况下交叉编译库,并且您希望在最终应用程序中使用库的所有函数,那么库的文件大小是一个非常好的球场估计。唯一不起作用的方法是,如果你有很多零初始化的全局(或静态)变量。当然,运行时内存分配是另一回事,但你已经考虑到了这一点。
基于x86代码的大小估计可能在同一个球场内,但实际上不应该被信任。尺寸确实因编译器而异,所以如果可以,请尝试匹配它,但任何最新的ARM编译器都可以用于粗略估计。
至于CPU的估算,如果不进行测量,就无法计算出数字。它取决于CPU的架构效率,编译器优化的有效性,时钟速率,内存速度,总线速度,缓存大小,其他运行任务导致的缓存压力等等。变量太多了。
您可以做的一件事是使用big-O表示法来说明算法在不同输入上的性能。
我可能只是说“轻”或“重”。你可能知道哪些适合。