我在这个网站上发现的所有问题只涉及Stack与Heap,而不讨论Frame,所以我的问题是这样的。不要把这三者都区分开来。
我所知道的:
Frame:frame就像一个黑板,上面写着一个函数的实例变量。当函数运行时,所有实例变量都存储在该函数的frame中。当一个函数被调用时,它的frame是在stack之上创建的。
Stack:可以将stack可视化为frames的物理stack。当一个方法(或函数)被执行时,它从stack中分配一个内存块。
Heap:所有对象指针都在heap上。
堆栈和框架是清晰的(我认为),但是我的Heap语句正确吗?
发布于 2012-04-14 19:08:59
堆:所有对象指针都在堆上。
堆栈和框架是清晰的(我认为),但是我的Heap语句正确吗?
不完全是。大多数(*)动态分配的对象驻留在堆上,指向这些对象的指针驻留在其他对象(或变量,它们本质上是同一件事)中-这些对象可能在堆栈或堆上。“对象”和“指向对象的指针”之间的这种区别在Objective-C中很重要(并不是在所有语言中都是如此),并不是说所有的“对象指针都在堆上”。
(*)“大多数”,因为在堆栈上分配动态对象是可能的,有时也是非常有用的。你不能用Objective-C对象做到这一点,但是你可以用C对象做到这一点(C是Objective-C的一部分)。不要担心这一点,这个脚注更多地是为了说明这里描述的模型是一个简化。
发布于 2012-04-14 17:57:33
是。堆是动态内存的非连续空间。
发布于 2012-07-23 10:04:05
基于@CRD的答案...
考虑堆的另一种方式就是顾名思义--一堆乱七八糟的堆。我们需要指针来帮助我们找到返回到堆上抛出的对象的方法。
https://stackoverflow.com/questions/10152661
复制相似问题