4

我在这个网站上找到的所有问题都只涉及StackvsHeap并且不讨论Frame所以这是我的问题。不要理解这三个之间的区别。

我知道的:

Frame: Aframe就像是一个函数的实例变量的黑板。当函数运行时,所有实例变量都存储在该frame函数的内部。当一个函数被调用时,它 frame会在stack.

Stack: Astack可以可视化为 的物理stackframes当一个方法(或函数)被执行时,它会从stack.

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

堆栈和框架很清楚(我认为),但我的Heap陈述是否正确?

4

3 回答 3

2

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

Stack and Frame 很清楚(我认为),但我的 Heap 语句是否正确?

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

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

于 2012-04-14T11:08:58.607 回答
0

是的。堆是动态内存的非连续空间。

于 2012-04-14T09:57:32.847 回答
0

基于@CRD的回答...

考虑堆的另一种方式是顾名思义 - 一堆乱七八糟的东西。我们需要指针来帮助找到回到堆上的对象的方法。

于 2012-07-23T02:04:05.057 回答