Можно ли написать программу на 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)
, когда он встречается с ним, но на практике это не так.