2012-04-23 36 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++库的某些实现