Stack - Frame - Objective-C中的堆

时间:2012-04-14 09:53:33

标签: objective-c memory-management stack heap frame

我在本网站上发现的所有问题仅涉及Stack vs Heap,但没有 讨论Frame所以这是我的问题。不要区分这三者。

我所知道的:

Frameframe就像一个黑板,例如函数的变量。 在函数运行时,存储所有实例变量 在该函数的frame内。当一个函数被调用时 frame是在stack

之上创建的。{/ 1}

Stackstack可以显示为stack的实际frames。 当执行方法(或函数)时,它会分配一个 来自stack的内存块。

Heap: 所有对象指针都存在于heap

Stack and Frame很清楚(我想)但是我的Heap语句是对的吗?

3 个答案:

答案 0 :(得分:2)

  

堆:所有对象指针都在堆上。

     

Stack and Frame很清楚(我认为)但是我的Heap声明是对的吗?

不完全。大多数(*)动态分配对象活在堆上,指针生活在其他对象(或变量,它们本质上是相同的东西) - 可能是在堆栈或堆上。 “对象”和“指向对象的指针”之间的区别在Objective-C中很重要(在所有语言中都不是这样),并且说所有“对象指针都存在于堆上”并不正确。

(*)“Most”因为在堆栈上分配动态对象是可能的,有时非常有用。您无法使用Objective-C对象执行此操作,但可以使用C对象执行此操作(并且C是Objective-C的一部分)。不要关心自己,这个脚注更能说明这里描述的模型是一种简化。

答案 1 :(得分:0)

是。堆是动态记忆的非连续空间。

答案 2 :(得分:0)

以@ CRD的回答为基础......

考虑堆的另一种方式是它的名字暗示 - 一堆杂乱。我们需要指针来帮助找到返回堆上的对象的方法。