std :: cout是否完全在堆栈上运行?

Mes*_*sop 7 c++ heap stack cout

在C++中,当我这样使用时std::cout:

std::cout << "myString" << std::endl;
Run Code Online (Sandbox Code Playgroud)

是否有任何东西将由std :: cout 在堆上分配?或者std :: cout会在堆栈上执行所有操作(意味着std :: cout及其底层函数不会执行任何操作new/malloc/etc...)?

我想知道是否大量使用std :: cout会导致一些堆碎片

Jar*_*Par 7

在此特定示例中,您的代码不会在堆上引起任何直接分配.但是,任何方法的实现都可以使用堆来完成部分工作.只要方法实现在其自身之后正确清理,这就完全没问题.

该逻辑适用于诸如的方法operator<<(std::ostream&, T).

  • @olchauvin它取决于`stl`的实现和给定`T`的`operator <<`的实现.我不相信`cout`的实现如何管理内存有任何规范. (3认同)

mik*_*egg 5

这完全取决于基本C++库的某些实现