静态计算C程序的执行时间和内存消耗

Statically calculate execution time and memory consumption of C program

提问人:Ivan Perez 提问时间:11/15/2023 更新时间:11/15/2023 访问量:45

问:

我正在研究一种编译为 C99 的语言,没有 mallocs、没有递归、没有循环。所有内存都是预先分配的,所有函数都会终止(除非有除以零之类的异常)。

我的模块的入口点始终是相同的:一个函数。void step(void)

在这种情况下,有没有一种工具可以计算我的代码的最大内存使用量和最大执行时间?

C 分析 Valgrind 硬实时

评论

0赞 Craig Estey 11/15/2023
您已经知道内存使用情况,因为内存是预先分配的(即)这样做会给你。如果没有代表性的代码,很难辨别执行时间(我无法想象没有循环/递归的代码[代替循环])。所以,如果没有循环,我假设你没有数组。一些静态分析工具可能会产生一些东西(例如O(n)),但实际执行时间实际上取决于实际执行基准测试代码,因为执行时间取决于CPU/型号、系统负载、内存大小、内存速度、缓存大小/速度等。size ./myprogram

答:

-1赞 Paul Floyd 11/15/2023 #1

valgrind --tool=massif --stacks=yes --pages-as-heap=yes

以上应分析所有内存使用情况。

或者,在运行可执行文件时,可以使用(或查看 /proc/PID/maps)。pmap -x PID

对于执行时间,我只使用/usr/bin/time -p exe_name

评论

0赞 Eric Postpischil 11/15/2023
该问题要求静态计算和最大值。使用 Valgrind 或运行程序不是静态的,仅涵盖所执行的情况,而不是所有可能输入的最大值。/usr/bin/time
0赞 Paul Floyd 11/15/2023
它被标记为 Valgrind 和 profiling,这使得它在我的书中模棱两可。