Можно ли написать программу на C, которая ничего не делает - даже не занимая память?

Это сложный вопрос C, заданный в интервью: Напишите программу, которая ничего не делает, даже не занимая память.

Можно ли это сделать?

Ответы

Ответ 1

Все программы используют память. Когда вы запускаете программу, ОС будет устанавливать адресное пространство для программы, скопировать ее аргументы в пространство процесса, дать ему идентификатор процесса и поток, дать ему некоторые дескрипторы файлов для ввода-вывода и т.д. Даже если ваш программа немедленно прекращает работу, вы все еще используете эту память и время процессора.

Ответ 2

Нет, это невозможно. Код и стек должны идти куда-то, и он будет почти всегда находиться в памяти.

Игнорируя, что, конечно, довольно просто написать приложение, которое сразу же выходит.

Ответ 3

ваш ответ должен быть в порядке, задавая вопрос о том, "почему" вы хотели бы сделать такое. это показало бы широту для размышлений вне вопроса.

Ответ 4

На первый взгляд вопрос, кажется, имеет простой ответ: "Нет, это невозможно". @templatetypedef дал некоторые причины.

Но, возможно, дело в том, чтобы посмотреть, как вы его решаете. Вы можете получить "отметки" для запроса "какой памяти" или для наблюдения за некоторыми точками, которые сделал @templatetypedef. Или для показа пустого метода main(), данного @Mihran Hovsepyan, а затем объясняя, что какая-то память будет задействована даже в этом минимальном случае.

Ответ 5

Хотя при запуске программы будет выделена какая-то память, большинство людей не знают, что main() не является реальной точкой входа в программу. mainCRTStartup, по крайней мере, в консольном приложении Windows. Если вы создаете программу с реальной точкой входа, вы избежите процедур инициализации кучи, разбора аргументов аргументов, инициализации глобальной переменной и т.д.

Итак, в некотором смысле, вы можете сделать программу, которая позволяет избежать кучи управления и прочее. Но ОС все равно будет читать его в памяти.

Смотрите: http://www.catch22.net/tuts/minexe

Ответ 6

Пустая программа - это программа, не так ли?

Ниже моя программа использования ресурсов:)


Также обратите внимание. Строго говоря, программа действительно не потребляет какой-либо ресурс, пока ОС не загрузит его и не запустит. Когда это произойдет, мы называем это процессом.

Ответ 7

Правильный ответ заключается в том, что он специфичен для реализации. Реализация может поддерживать нулевые программы, а механизм execve (или эквивалентный) может выполнять эквивалент _Exit(0), когда он встречается с ним, но на практике это не так.