【问题标题】:Is std::cout fully operating on the stack?std::cout 是否完全在堆栈上运行?
【发布时间】:2012-04-23 17:41:31
【问题描述】:

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

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

std::cout 会在 heap 上分配什么吗?或者 std::cout 会做 stack 上的所有事情(意味着 std::cout 及其底层函数不会做任何new/malloc/etc...)?

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

【问题讨论】:

  • 不能保证operator&lt;&lt;(std::ostream&amp;, T) 不会调用new。这显然适用于任何用户定义的T
  • 你为什么担心堆碎片。您正在做的其他事情是否使这成为一个大问题?
  • @LokiAstari 我只是出于好奇而问这个问题。
  • 更根本的是,该标准没有讨论堆栈与堆。通过动态分配所有内容,C++ 实现完全有可能没有堆栈。

标签: c++ heap-memory cout stack-memory


【解决方案1】:

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

此逻辑适用于operator&lt;&lt;(std::ostream&amp;, T)等方法。

【讨论】:

  • 所以要看stl的实现。 stl中没有指定std::cout应该如何处理内存吗?
  • @olchauvin 它取决于stl 的实现以及给定Toperator&lt;&lt; 的实现。我不相信有任何规范可用于cout 的实现如何管理内存。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2020-12-26
    • 2011-04-21
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多