2012-04-23 18 views
7

W C++, kiedy używam std::cout tak:Czy std :: cout działa poprawnie na stosie?

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

Czy jest coś, co zostanie przeznaczona na sterty przez std :: cout? Czy też std :: cout zrobi wszystko na stacie (co oznacza, że ​​std :: cout i jego funkcje podstawowe nie będą wykonywać żadnego)?

Chcę wiedzieć, czy mocno za pomocą std :: cout mogłyby powodować pewne fragmentację sterty

+3

Nie ma gwarancji, że 'operator << (std :: ostream & T)' 'nie będzie wywoływał new'. Jest to oczywiście prawdziwe dla każdego zdefiniowanego przez użytkownika 'T'. –

+1

Dlaczego martwi cię fragmentacja sterty. Czy jest coś, co robisz, co sprawia, że ​​jest to duży problem? –

+1

@LokiAstari Po prostu pytam o to z ciekawości. – Mesop

Odpowiedz

7

w tym konkretnym przykładzie kodu nie powoduje żadnych bezpośrednich przydziałów na stercie. Jednak możliwe jest zastosowanie dowolnej metody użycia sterty dla części jej pracy. Jest to całkowicie w porządku, o ile wykonanie metody prawidłowo czyści po sobie. Ta metoda dotyczy takich metod, jak operator<<(std::ostream&, T).

+0

To zależy od implementacji kodu STL. Czy nie ma niczego, co określa, w jaki sposób pamięć powinna być obsługiwana przez 'std :: cout' w stl? – Mesop

+3

@olchawin to zależy od implementacji 'stl' i implementacji' operator << 'dla danego' T'. Nie sądzę, że istnieje jakakolwiek specyfikacja dotycząca tego, w jaki sposób implementacja 'cout' zarządza pamięcią. – JaredPar

5

To całkowicie zależy od pewnej realizacji podstawowych bibliotek C++