【问题标题】:C++ allocation standard?C++ 分配标准?
【发布时间】:2015-05-17 18:10:13
【问题描述】:

假设我有一个类 Foo 和一个函数 Bar

void Bar(void)
{
Foo a();
}

这是否意味着一定不会在主内存中分配 a ? 或者这是否取决于编译器,所以编译器可能会分配内存并导致与我们写Foo* a=new Foo

【问题讨论】:

  • 你说的“主内存”是什么意思。我知道 C++ 实现总是使用 RAM,除非你使用一些具有非均匀 RAM 或 GPGPU 的微控制器,也许。 a 对象将位于堆栈上。

标签: c++


【解决方案1】:

Foo a(); 是一个函数声明。应该是Foo a;而a在栈内存中。

【讨论】:

    【解决方案2】:

    您要查找的术语是一个自动变量。这意味着包含在该变量中的对象保证在作用域结束时自动被销毁。

    当您使用new 时,该对象仅在您明确地delete 时才会被销毁(或通过明确使用负责销毁它的机制,如智能指针)。换句话说,生命周期是手动管理的。

    当然,自动生命周期语义在任何情况下都不同于手动语义。话虽如此,这两种情况下的存储位置(堆栈、堆、寄存器或其他)都无关紧要。

    【讨论】:

      【解决方案3】:

      从技术上讲,如果a 适合寄存器,它最终可能会使用“无内存”。否则,它将在堆栈上分配,我称之为“主内存”,与Foo *a = new Foo; 相同的内存,但不同的部分[new 使用堆内存,堆栈与堆不同,但同样的记忆]。

      当然,如果类Foo 包含一个构造函数,它本身可以调用new 以及所有可能会或可能不会改变内存使用的其他函数...

      【讨论】:

        猜你喜欢
        • 2018-07-09
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        • 2018-07-24
        • 2020-06-08
        • 1970-01-01
        • 2015-09-04
        • 2016-02-13
        相关资源
        最近更新 更多