2012-04-23 7 views
7

In C++, quando sto usando std::cout così:È std :: cout pienamente operativo nello stack?

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

C'è qualcosa che sarà assegnato sulla mucchio da std :: cout? Oppure std :: cout fa tutto sullo stack (significa che std :: cout e le sue funzioni sottostanti non faranno alcun new/malloc/etc...)?

voglio sapere se pesantemente utilizzando std :: cout potrebbe causare una certa frammentazione degli heap

+3

Non v'è alcuna garanzia che 'operatore << (std :: ostream &, T)' non invocherà 'new'. Questo è ovviamente vero per qualsiasi 'T' definito dall'utente. –

+1

Perché sei preoccupato per la frammentazione dell'heap. C'è qualcos'altro che stai facendo che rende questa una grande preoccupazione? –

+1

@LokiAstari Lo chiedo solo per curiosità. – Mesop

risposta

7

In questo esempio specifico il codice non è causa di alcun allocazioni dirette sul mucchio. Tuttavia è possibile per l'implementazione di qualsiasi metodo utilizzare l'heap per una parte del suo lavoro. Questo è perfettamente a posto finché l'implementazione del metodo si ripulisce correttamente da sola.

Questa logica si applica a metodi come operator<<(std::ostream&, T).

+0

Quindi dipende dall'implementazione di stl. Non c'è nulla che specifica come la memoria dovrebbe essere gestita da 'std :: cout' in the stl? – Mesop

+3

@olchauvin dipende dall'implementazione di 'stl' e dall'implementazione di' operator << 'per un dato' T'. Non credo ci siano specifiche disponibili su come l'implementazione di 'cout' gestisca la memoria. – JaredPar

5

Questo completamente dipende da una certa implementazione del C++ base librerie