计算C程序的空间复杂度

时间:2012-03-05 08:57:44

标签: c gcc cygwin

我想计算Windows上C程序的空间复杂度〜内存使用情况。 我希望在查看任务管理器时完成所有操作。 我发现link计算代码的空间:

#include <stdio.h> 

int main(void) { 
  int x; 
  for(; scanf("%d",&x) > 0 && x != 42; printf("%d\n", x)); 
  return 0; 
}

1724 kB

  1. 如何计算te?

  2. 如何实现为一段代码计算此类空间复杂度度量的任何系统?

  3. 欢迎你回答。

1 个答案:

答案 0 :(得分:4)

Ankit,从你对wallyk的回复中可以看出,这里有一些混乱。这里的术语空间复杂度可能意味着许多不同的东西,范围从较小的代码可执行文件大小;分配给流程的资源量以及这些资源在执行期间的数量变化情况。

1724可以通过许多不同的方式计算,具体取决于它所代表的含义。它是代表生成的可执行文件中的所有内容,还是仅代表“代码”文本?可执行文件大小在不同平台上会有所不同吗?这只涉及静态信息。动态信息(有关运行时程序性能的信息)是另一种蠕虫病毒。

在这种情况下,您必须意识到,分配给流程的资源可能与流程所需的最低资源不完全匹配。如果你要求的程序寻找需要分配给进程的最小内存大小,那么你会陷入非常模糊的境地:你是在谈论所需的物理内存,还是从流程的角度来看虚拟内存?例如,如果我们运行同一进程的两个实例,则两个进程可以共享只读(例如代码存储器),因此其中一个实例不需要为其计算。询问操作系统进行此类计算是有问题的,因为它需要非常准确地知道您要求的内容,同时通过查看代码文本并忽略平台来计算运行时内存使用的程序也存在问题。

计算这个最小值是非常重要的,尽管它可能已经由某人完成。无论哪种方式,您都需要使用比“空间复杂度”更具体和更少混淆的术语来搜索它,这更适用于纸笔算法。