2012-04-23 3 views
7

В C++, когда я использую std::cout вроде этого:Действительно ли std :: cout работает в стеке?

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

Есть что-нибудь, что будет выделено на куче по станд :: соиЬ? Или std :: cout сделает все на стеке (что означает, что std :: cout и его основные функции не будут делать new/malloc/etc...)?

Я хочу знать, если сильно используя зЬй :: COUT может вызвать некоторые Фрагментация кучи

+3

Там нет никакой гарантии, что 'оператор << (станд :: ostream &, T)' не будет ссылаться на 'new'. Это, очевидно, верно для любого пользовательского 'T'. –

+1

Почему вас беспокоит фрагментация кучи. Есть ли что-то еще, что вы делаете, что делает это большой проблемой? –

+1

@LokiAstari Я просто прошу об этом из любопытства. – Mesop

ответ

7

В этом конкретном примере код не вызывает каких-либо прямых ассигнований на куче. Однако для реализации любого метода можно использовать кучу для части ее работы. Это прекрасно, если реализация метода правильно очищается после себя.

Эта логика применяется к таким методам, как operator<<(std::ostream&, T).

+0

Так что это зависит от реализации stl. Разве нет ничего, что указывало бы, как память должна обрабатываться 'std :: cout' в stl? – Mesop

+3

@olchauvin зависит от реализации 'stl' и реализации' operator << 'для заданного' T'. Я не думаю, что есть какая-либо спецификация, доступная для того, как реализация 'cout' управляет памятью. – JaredPar

5

Это полностью зависит от конкретного внедрения базовых C++ библиотеки

Смежные вопросы