首页  >  文章  >  后端开发  >  在堆栈和堆上创建对象时,对对象的引用存储在哪里?

在堆栈和堆上创建对象时,对对象的引用存储在哪里?

Linda Hamilton
Linda Hamilton原创
2024-11-27 01:52:13914浏览

Where are References to Objects Stored when Created on the Stack vs. the Heap?

在栈或堆上创建对象:

问题来了:在栈和堆上创建对象时,引用在哪里那些实际存储的对象?

在 C 中,对象存储是由它的上下文决定的,即它的存储持续时间:

对象 o 创建一个对象:

  • 自动存储: 如果在函数中本地声明,则该对象驻留在堆栈.
  • 静态存储:如果在命名空间或文件范围声明,则该对象被放置在堆栈或堆之外的专用内存区域
  • 成员变量:如果声明为另一个对象中的子对象,它继承包含对象的存储

Object* o 创建一个具有自动存储功能的指针。

指针像任何其他对象一样在堆栈上分配。它们的存储持续时间由上下文决定,而不是由初始化表达式决定。

例如,在下面的代码片段中:

struct Foo {
    Object o;
};

Foo foo, f;
Foo* p = new Foo;
Foo* pf = &f;
  • foo.o 没有静态存储,也没有在堆栈上或堆上,因为 foo 本身具有静态存储。
  • f.o 具有自动存储,驻留在堆栈上,因为 f 具有自动存储存储。
  • p->o 具有动态存储,在堆上,因为 *p 具有动态存储。
  • pf->o 和 f.o 引用同一个对象,因为 pf 直接指向to f.

综上所述,对象存储位置仅取决于其上下文,而指针始终分配在堆栈上,但可以引用各种对象储存期限。

以上是在堆栈和堆上创建对象时,对对象的引用存储在哪里?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn