"生活在堆里"是什么意思?

Joh*_*igs 6 objective-c

我正在学习Objectiv C,我听到"住在堆"不断,从我的理解它的某种未知区域的一个指针家住,而是试图真正把头部周围的确切期限...像"我们应该让我们的财产strong不会生活在堆里.他说,因为这个地产是私有的.我知道它有很大的不同很明显我们要确保我们想要计算对此对象的自动释放不会清理它(我们要从到目前为止我知道"保留"),但我想确保我知道,这个术语,因为它是使用非常频繁.

欣赏它

das*_*ght 14

C(以及扩展,Objective C)程序使用三个主要的内存区域来存储数据:

  • 静态区域
  • 自动区域(也称为"堆栈")和
  • 动态区域(也称为"堆").

当您通过发送类a newalloc消息来分配对象时,生成的对象将分配在动态存储区域中,因此该对象被称为存在于堆中.所有Objective-C对象都是这样的(尽管引用这些对象的指针可能位于三个内存数据区域中的任何一个).相比之下,原始局部变量和数组在堆栈上"存活",而全局原始变量和数组存在于静态数据存储中.

只有堆对象引用计数,尽管你可以从堆中使用分配内存malloc/ calloc/ realloc,在这种情况下分配不会引用计数:您的代码会负责时,决定free分配的动态内存.