2011-01-06 6 views
13

Esta es una pregunta complicada de C en una entrevista: escriba un programa que no hace nada, ni siquiera ocupando memoria.¿Es posible escribir un programa en C que no hace nada, ni siquiera ocupando memoria?

¿Es posible hacerlo?

+1

¿Define exactamente lo que quieres decir con take memory? ¿Implica que el programa ni siquiera puede asignar memoria a la Pila de llamadas y/o al Heap o puede usar memoria cuando se ejecuta? – Argote

+0

@mr_eclair: incluya la etiqueta de la entrevista si es una pregunta de la entrevista. –

+19

evitar ese empleador. No tienen ni idea de lo que están preguntando. –

Respuesta

35

Todos los programas usan memoria. Cuando ejecuta el programa, el SO configurará un espacio de direcciones para el programa, copiará sus argumentos en su espacio de proceso, le dará un ID de proceso y un hilo, le dará algunos descriptores de archivos para E/S, etc. Incluso si su el programa termina inmediatamente, usted todavía usa esta memoria y el tiempo de CPU.

+0

+1 Gracias .. –

4

No, no es posible. El código y la pila deben ir a algún lado y eso, casi siempre, estará en la memoria.

Ignorando eso, seguramente es bastante fácil simplemente escribir una aplicación que salga de inmediato.

+0

"casi siempre"? ¿A dónde más irían el código y la pila sino en la memoria? –

+1

@Martin: algunas máquinas tienen "memoria de código" y "memoria de pila". Supongo que sigue siendo memoria ... pero no es memoria en el sentido malloc del término, ya que proviene de un grupo totalmente diferente. – Goz

2

su respuesta debe estar en la línea de preguntar por 'por qué' usted querría hacer tal cosa. esto mostraría una libertad para pensar más allá de la pregunta.

+3

Y si sus profesores son como los míos ... le fallarán por ser un asno inteligente. Así que me alegro de haber dejado la universidad (Me alegro de haber dejado el lado del aprendizaje ... el lado de las fiestas y el de dormir durante todo el día fue bastante agradable;)). – Goz

+0

beberé para eso ... zzzz !! :-) –

+1

De hecho, creo que preguntar por qué quieres hacerlo no es una gran pregunta en este caso. Es una pregunta artificial o hipotética que explora algunos conceptos importantes: el programa nulo en sí mismo no necesita ser valioso si el pensamiento al tratar de producirlo enseña algo. Algunas veces el viaje es su propia recompensa. – djna

1

En la superficie, la pregunta parece tener una respuesta simple: "No, no se puede hacer". @templatetypedef ha dado algunas razones.

Pero quizás el objetivo de la pregunta es ver cómo lo aborda. Puede obtener "marcas" por preguntar "qué tipo de memoria" o por observar algunos de los puntos que @templatetypedef hizo. O para mostrar el método main() vacío proporcionado por @Mihran Hovsepyan y luego explicar que algún recuerdo estará involucrado incluso en este caso mínimo.

0

El programa vacío es un programa, ¿no es así?

A continuación es mi ningún programa de uso de los recursos :)


También tenga en cuenta que. Estrictamente hablando, un programa realmente no consume ningún recurso hasta que OS lo cargue y lo ejecute. Cuando esto sucede, lo llamamos Proceso.

1

Aunque el sistema operativo asignará cierta memoria al iniciar un programa, la mayoría de las personas desconoce que main() no es el punto de entrada real del programa. mainCRTStartup es, al menos en la aplicación de consola de Windows. Si crea un programa con un punto de entrada real, evitará las rutinas de inicialización del montón, el análisis del argumento del comando, la inicialización de la variable global, etc.

Así que, en cierto sentido, puede hacer un programa que evite la gestión de montones y esas cosas. Pero el sistema operativo aún lo leerá en la memoria.

Ver: http://www.catch22.net/tuts/minexe

0

La respuesta correcta es que es específico de la implementación. Una implementación podría soportar programas nulos y el mecanismo execve (o equivalente) podría realizar el equivalente de _Exit(0) cuando encuentra uno, pero en la práctica no lo hace.

+2

Cuidado de Downvoter para explicar? –

Cuestiones relacionadas