рассчитать сложность пространства C-программы - PullRequest
2 голосов
/ 05 марта 2012

Я хочу вычислить сложность пространства ~ использование памяти программой на C в Windows. Я хочу сделать все это без просмотра диспетчера задач. Я обнаружил, что ссылка вычисляет пространство для кода:

#include <stdio.h> 

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

будет 1724 кБ

  1. Как рассчитывается тэ?

  2. Как реализовать любую систему, которая вычисляет такую ​​меру сложности пространства для фрагмента кода?

Ваш ответ будет приветствоваться.

1 Ответ

4 голосов
/ 05 марта 2012

Анкит, из твоего ответа на wallyk ясно, что здесь есть некоторая путаница. Термин «сложность пространства» здесь может означать много разных вещей, начиная от меньшего размера исполняемого кода; к количеству ресурсов, выделенных процессу, и как количество этих ресурсов изменяется во время выполнения.

1724 можно рассчитать разными способами в зависимости от того, что он представляет. Представляет ли он все в результирующем исполняемом файле или только текст «кода»? Имеет ли значение, что размеры исполняемых файлов будут разными на разных платформах? И это касается только статической информации. Динамическая информация (информация о производительности программ во время выполнения) - это еще один источник червей.

В этом случае вы должны понять, что ресурсы, выделенные процессу, могут не совсем соответствовать минимальному минимуму, необходимому процессу. Если вы запрашиваете программу, которая ищет минимальный объем памяти, который должен быть выделен для процесса, вы попадаете в очень темное место: говорите ли вы о требуемой физической памяти или виртуальной памяти с точки зрения процесса ? Например, если мы запускаем два экземпляра одного и того же процесса, то два процесса могут совместно использовать только чтение (например, память кода), и поэтому одному из экземпляров не нужно будет рассчитывать это. Запрашивать операционную систему для таких вычислений проблематично, поскольку ей нужно будет очень точно знать, о чем вы просите, в то время как наличие программы, которая рассчитывает использование памяти во время выполнения, просматривая текст кода и игнорируя платформу, также проблематично.

Расчет этого минимума крайне нетривиален, хотя, возможно, он уже кем-то выполнен. В любом случае вам нужно будет искать его, используя более конкретные и менее запутанные термины, чем «сложность пространства», что более применимо к алгоритму с ручкой и бумагой.

...