我在本网站上发现的所有问题仅涉及Stack
vs Heap
,但没有
讨论Frame
所以这是我的问题。不要区分这三者。
我所知道的:
Frame
:
frame
就像一个黑板,例如函数的变量。
在函数运行时,存储所有实例变量
在该函数的frame
内。当一个函数被调用时
frame
是在stack
。
Stack
:
stack
可以显示为stack
的实际frames
。
当执行方法(或函数)时,它会分配一个
来自stack
的内存块。
Heap
:
所有对象指针都存在于heap
。
Stack and Frame很清楚(我想)但是我的Heap
语句是对的吗?
答案 0 :(得分:2)
堆:所有对象指针都在堆上。
Stack and Frame很清楚(我认为)但是我的Heap声明是对的吗?
不完全。大多数(*)动态分配对象活在堆上,指针生活在其他对象(或变量,它们本质上是相同的东西) - 可能是在堆栈或堆上。 “对象”和“指向对象的指针”之间的区别在Objective-C中很重要(在所有语言中都不是这样),并且说所有“对象指针都存在于堆上”并不正确。
(*)“Most”因为在堆栈上分配动态对象是可能的,有时非常有用。您无法使用Objective-C对象执行此操作,但可以使用C对象执行此操作(并且C是Objective-C的一部分)。不要关心自己,这个脚注更能说明这里描述的模型是一种简化。
答案 1 :(得分:0)
是。堆是动态记忆的非连续空间。
答案 2 :(得分:0)
以@ CRD的回答为基础......
考虑堆的另一种方式是它的名字暗示 - 一堆杂乱。我们需要指针来帮助找到返回堆上的对象的方法。