2012-04-23 30 views
7

Trong C++, khi tôi đang sử dụng std::cout như thế:Là std :: cout hoạt động hoàn toàn trên ngăn xếp?

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

Có điều gì đó sẽ được phân bổ trên đống bởi std :: cout? Hoặc sẽ std :: cout làm tất cả mọi thứ trên ngăn xếp (có nghĩa là std :: cout và các chức năng cơ bản của nó sẽ không làm bất kỳ new/malloc/etc...)?

Tôi muốn biết nếu nặng nề using std :: cout có thể gây ra một số đống phân mảnh

+3

Không đảm bảo rằng toán tử << (std :: ostream &, T) 'sẽ không gọi' mới'. Điều này rõ ràng là đúng đối với bất kỳ 'T' do người dùng định nghĩa. –

+1

Tại sao bạn lo lắng bởi sự phân mảnh heap. Có cái gì khác bạn đang làm mà làm cho một mối quan tâm lớn? –

+1

@LokiAstari Tôi chỉ yêu cầu điều đó từ sự tò mò. – Mesop

Trả lời

7

Trong ví dụ cụ thể này mã của bạn không gây ra bất kỳ phân bổ trực tiếp trên heap. Tuy nhiên nó có thể cho việc thực hiện bất kỳ phương pháp để sử dụng heap cho một phần của công việc của nó. Điều này là hoàn toàn tốt miễn là phương pháp thực hiện đúng cách làm sạch sau khi chính nó.

Logic này áp dụng cho các phương pháp như operator<<(std::ostream&, T).

+0

Vì vậy, nó phụ thuộc vào việc thực hiện của stl. Không có bất cứ điều gì mà chỉ định như thế nào bộ nhớ sẽ được xử lý bởi 'std :: cout' trong stl? – Mesop

+3

@olchauvin nó phụ thuộc vào việc thực hiện 'stl' và việc thực thi toán tử <<' cho một 'T' đã cho. Tôi không tin rằng có bất kỳ đặc điểm kỹ thuật có sẵn cho việc thực hiện 'cout' quản lý bộ nhớ. – JaredPar

5

Điều này hoàn toàn phụ thuộc vào việc triển khai một số thư viện C++ cơ bản

Các vấn đề liên quan