2011-09-19 26 views
5

Leo en los estándares de codificación de Google C++ que Google no usa la excepción. Si no se utiliza la excepción, ¿cómo libera la memoria cuando ocurren errores en su programa?¿Un programa C++ libera automáticamente la memoria cuando se bloquea?

Por ejemplo, f() llama a g(), y si hay un error en g(), debería liberar toda la memoria asignada en g(), y luego llamar a una excepción a f(). Una vez que f() capte la excepción, f() liberará toda la memoria asignada en f() y saldrá del programa.

Si no se utiliza la excepción, y si hay un error en g(), ¿puedo forzar la salida exit(0), y el programa C++ será lo suficientemente inteligente como para liberar toda la memoria asignada? Supongo que, dado que C++ mantiene una pila y un montón, y una vez que el programa sale, ¿C++ liberará automáticamente la pila y el montón?

+5

Es el sistema operativo que recupera la memoria, por lo general. –

+2

bien si todo el proceso falla, entonces sí, la memoria es liberada por el sistema operativo. no importa en qué idioma se haya escrito el programa. – clamp

+0

Podría decirse que es un poco fraudulento afirmar que algo es C++ si prohíbe las excepciones. Es como ofrecerle un automóvil a su conductor, pero solo si no usa combustible. –

Respuesta

7

El sistema operativo limpia todas las memorias usadas y los identificadores de archivos cuando un proceso finaliza por algún motivo.

-2

He oído que algunos tipos de memoria como, en Windows, la memoria de pila global COM no se puede liberar para usted. Sin embargo, la mayoría de las memorias/controladores se limpian, porque el sistema operativo tiene que hacer frente a la condición de que su aplicación se bloquee. Ciertamente puede garantizarlo en el caso de la memoria local del proceso y la mayoría de los manejos, como los manejadores de archivos, etc. En el caso general, puede suponer que el sistema operativo limpiará después de usted cuando finalice su aplicación.

Además, nunca, nunca, siga la guía de estilo de Google. No es para C++, es para C++, sin todo lo que tiene que llevar para hacerlo C. Podría funcionar para Google (dudosamente), pero definitivamente no funcionará para nadie más.

Cuestiones relacionadas