【问题标题】:calculate the space complexity of a C program计算 C 程序的空间复杂度
【发布时间】:2012-03-05 08:57:44
【问题描述】:

我想计算空间复杂度 ~ 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. 如何实现为一段代码计算这种空间复杂度度量的任何系统?

欢迎您的回答。

【问题讨论】:

  • 什么是空间复杂度?和内存使用有关系吗?
  • 空间需求(即内存使用)可以在运行时测量(例如,在 Linux 上使用/proc/1234/maps 表示进程 1234)。空间复杂度是一个完全不同的主题en.wikipedia.org/wiki/Computational_complexity_theory,并且在最一般的情况下非常难以精确计算(在一般或病态的情况下可能难以处理或无法确定)。
  • 嗯,对你的问题(也是我使用的那个)最愚蠢的答案就是在任务管理器(或任何其他进程监视器)中检查进程的内存使用情况,如果通过 空间复杂度 你指的是内存使用情况。
  • @wallyk 实际上我想计算 C 程序运行所占用的内存。即如果它使用int a,那么基本上是使用 4 bytes 等等。现在我想计算整个程序占用的内存。
  • 你将如何处理malloc-ated 堆数据,其大小取决于输入???

标签: c gcc cygwin


【解决方案1】:

Ankit,从您对 wallyk 的回复来看,很明显这里存在一些混淆。这里的空间复杂度一词可能意味着许多不同的东西,从较小的可执行代码大小;分配给进程的资源数量以及这些资源的数量在执行过程中如何变化。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2021-02-08
    • 2016-04-01
    • 2015-07-25
    相关资源
    最近更新 更多