计算C程序的空间复杂度

计算C程序的空间复杂度,c,gcc,cygwin,C,Gcc,Cygwin,我想计算Windows上C程序的空间复杂度~内存使用量。 我想在不查看任务管理器的情况下完成这一切。 我发现它计算代码的空间: #include <stdio.h> int main(void) { int x; for(; scanf("%d",&x) > 0 && x != 42; printf("%d\n", x)); return 0; } #包括 int main(void){ int x; 对于(;scanf(“%d

我想计算Windows上C程序的空间复杂度~内存使用量。 我想在不查看任务管理器的情况下完成这一切。 我发现它计算代码的空间:

#include <stdio.h> 

int main(void) { 
  int x; 
  for(; scanf("%d",&x) > 0 && x != 42; printf("%d\n", x)); 
  return 0; 
}
#包括
int main(void){
int x;
对于(;scanf(“%d”,&x)>0&&x!=42;printf(“%d\n”,x));
返回0;
}
1724 kB

  • te是如何计算的

  • 我如何实现任何计算一段代码的空间复杂性度量的系统


  • 欢迎您的回答。

    Ankit,从您对wallyk的回复中可以看出,这里有一些混乱。这里的术语空间复杂性可能意味着许多不同的事情,从较小的可执行代码大小;分配给进程的资源量,以及这些资源的数量在执行过程中如何变化

    根据1724所代表的内容,可以用许多不同的方式计算它。它是表示生成的可执行文件中的所有内容,还是仅表示“代码”文本?不同平台上的可执行文件大小不同,这有关系吗?这只涉及静态信息。动态信息(关于程序运行时性能的信息)是另一种蠕虫

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


    计算这个最小值是非常不平凡的,尽管可能已经有人完成了。无论采用哪种方式,您都需要使用比“空间复杂性”更具体、更容易混淆的术语进行搜索,而“空间复杂性”更适用于纸笔算法。

    Ankit,从您对wallyk的回复中可以清楚地看出,这里存在一些混淆。这里的术语空间复杂性可能意味着许多不同的事情,从较小的可执行代码大小;分配给进程的资源量,以及这些资源的数量在执行过程中如何变化

    根据1724所代表的内容,可以用许多不同的方式计算它。它是表示生成的可执行文件中的所有内容,还是仅表示“代码”文本?不同平台上的可执行文件大小不同,这有关系吗?这只涉及静态信息。动态信息(关于程序运行时性能的信息)是另一种蠕虫

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


    计算这个最小值是非常不平凡的,尽管可能已经有人完成了。无论采用哪种方法,您都需要使用比“空间复杂性”更具体、更容易混淆的术语来搜索它,而“空间复杂性”更适用于纸笔算法。

    什么是空间复杂性?它与内存使用有关吗?空间需求(即内存使用)可以在运行时测量(例如,对于Linux上的进程1234,使用
    /proc/1234/maps
    )。空间复杂性是一个完全不同的主题,在最一般的情况下很难精确计算(在一般或病理情况下,可能是不可描述或不可判定的)。好吧,对你的问题(我使用的问题)最愚蠢的答案就是在任务管理器(或任何其他进程监视器)中检查进程的内存使用情况,如果按空间复杂度计算,您指的是内存使用情况。@wallyk实际上我想计算一个C程序运行时占用的内存。i、 e.如果它使用
    inta
    ,则基本上使用4个字节,以此类推。现在我想计算整个程序占用的内存。如何处理
    malloc
    -ated堆数据,其大小取决于输入???什么是空间复杂度?它与内存使用有关吗?空间需求(即内存使用)可以在运行时测量(例如,对于Linux上的进程1234,使用
    /proc/1234/maps
    )。空间复杂性是一个完全不同的主题,在最一般的情况下很难精确计算(在一般或病理情况下,可能是不可描述或不可判定的)。好吧,对你的问题(我使用的问题)最愚蠢的答案就是在任务管理器(或任何其他进程监视器)中检查进程的内存使用情况,如果按空间复杂度计算,您指的是内存使用情况。@wallyk实际上我想计算一个C程序运行时占用的内存。i、 e.如果使用
    int a<