【问题标题】:Are primitive variables garbage collected in C++ [duplicate]原始变量是否在 C++ 中被垃圾收集 [重复]
【发布时间】:2014-08-13 07:05:41
【问题描述】:

如果有这样的功能:

int func1() {
    int status = func2();

    // Do something with status.

    return status;
}

在这个函数的过程中,一个int类型的变量状态被分配了内存,在函数的过程中这个变量被使用,然后从func1返回。

我的问题是,什么时候为这个原语收集内存垃圾,或者它是否永远保留在内存中?

【问题讨论】:

  • C++ 没有垃圾收集器。
  • 话虽如此,大多数 C++ 编译器可能会生成将status 放入堆栈的代码(请参阅下面的答案),但我敢说这是特定于实现的。可能必须检查 C++ 语言规范才能给出概念上正确、独立于实现的答案。

标签: c++ function garbage-collection


【解决方案1】:

在您的示例中,status 变量在堆栈中分配,并将在 func1 返回后立即释放。

【讨论】:

    【解决方案2】:

    内存是从栈中分配的。当函数被调用时,堆栈指针将递增到足以容纳函数参数、局部变量、返回值(可能)和返回地址。当函数返回时,堆栈指针会减少完全相同的量,并且控制会在返回地址处恢复。

    换句话说,status 声明将导致堆栈指针增加一个额外的sizeof(int) 字节(如果编译器为了对齐而决定增加可能更多)。

    【讨论】:

    • 如果栈大小用完了,会不会抛出栈溢出错误。
    • @AnkitZalani 这取决于环境,但通常您至少会收到某种错误(例如 Linux 上的 SIGSEGV)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多