2012-04-23 67 views
7

En C++, cuando estoy usando std::cout así:¿Está std :: cout operando completamente en la pila?

std::cout << "myString" << std::endl; 

¿Hay algo que se asignará en el montón por std :: cout? O bien, std :: cout hará todo en la pila (lo que significa que std :: cout y sus funciones subyacentes no harán ningún new/malloc/etc...)?

Quiero saber si en gran medida el uso de std :: cout podría causar algún montón de fragmentación

+3

No hay ninguna garantía de que el operador '<< (std :: ostream y, t)' 'no invocará new'. Esto es obviamente cierto para cualquier 'T' definida por el usuario. –

+1

¿Por qué te preocupa la fragmentación del montón? ¿Hay algo más que estés haciendo que lo haga una gran preocupación? –

+1

@LokiAstari Solo estoy preguntando por curiosidad. – Mesop

Respuesta

7

En este ejemplo específico que su código no está causando ningún asignaciones directas en el montón. Sin embargo, es posible que la implementación de cualquier método use el montón para parte de su trabajo. Esto está perfectamente bien siempre que la implementación del método se limpie adecuadamente después de sí misma.

Esta lógica se aplica a métodos como operator<<(std::ostream&, T).

+0

Por lo tanto, depende de la implementación de la stl. ¿No hay nada que especifique cómo la memoria debe ser manejada por 'std :: cout' en stl? – Mesop

+3

@olchauvin depende de la implementación de 'stl' y la implementación de' operator << 'para una 'T' determinada. No creo que haya ninguna especificación disponible sobre cómo la implementación de 'cout' administra la memoria. – JaredPar

5

Esto depende por completo de una determinada aplicación de la C++ básico bibliotecas

Cuestiones relacionadas