2012-04-23 38 views
7

在C++中,當我使用std::cout這樣的:std :: cout是否完全在堆棧上運行?

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

是否有將在由性病::法院分配什麼?或者std :: cout會在堆棧上做所有事情(這意味着std :: cout及其底層函數不會執行任何new/malloc/etc...)?

我想知道,如果大量使用的std ::法院可能會導致一些堆碎片

+3

不能保證'operator <<(std :: ostream&,T)'不會調用'new'。對於任何用戶定義的「T」顯然都是如此。 – 2012-04-23 17:45:38

+1

你爲什麼擔心堆碎片。你還在做其他事情嗎?這是一個令人擔憂的問題嗎? – 2012-04-23 17:51:32

+1

@LokiAstari我只是出於好奇而問。 – Mesop 2012-04-23 17:59:35

回答

7

在這個具體的例子代碼不會導致堆上的任何直接撥款。然而,任何方法的實現都有可能在部分工作中使用堆。只要方法實現自己清理完畢,這就完全正常了。

該邏輯適用於諸如operator<<(std::ostream&, T)等方法。

+0

所以這取決於stl的實現。是不是有什麼指定應該如何處理std中的'std :: cout'內存? – Mesop 2012-04-23 17:54:30

+3

@olchauvin它取決於'stl'的實現和給定'T'的'operator <<'的實現。我不相信「cout」的實現如何管理內存。 – JaredPar 2012-04-23 17:55:56

5

這完全取決於基本C++庫的某些實現