首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中的栈帧堆

Objective-C中的栈帧堆
EN

Stack Overflow用户
提问于 2012-04-14 17:53:33
回答 3查看 1.1K关注 0票数 4

我在这个网站上发现的所有问题只涉及StackHeap,而不讨论Frame,所以我的问题是这样的。不要把这三者都区分开来。

我所知道的:

Frameframe就像一个黑板,上面写着一个函数的实例变量。当函数运行时,所有实例变量都存储在该函数的frame中。当一个函数被调用时,它的frame是在stack之上创建的。

Stack:可以将stack可视化为frames的物理stack。当一个方法(或函数)被执行时,它从stack中分配一个内存块。

Heap:所有对象指针都在heap上。

堆栈和框架是清晰的(我认为),但是我的Heap语句正确吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-14 19:08:59

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

堆栈和框架是清晰的(我认为),但是我的Heap语句正确吗?

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

(*)“大多数”,因为在堆栈上分配动态对象是可能的,有时也是非常有用的。你不能用Objective-C对象做到这一点,但是你可以用C对象做到这一点(C是Objective-C的一部分)。不要担心这一点,这个脚注更多地是为了说明这里描述的模型是一个简化。

票数 2
EN

Stack Overflow用户

发布于 2012-04-14 17:57:33

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

票数 0
EN

Stack Overflow用户

发布于 2012-07-23 10:04:05

基于@CRD的答案...

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10152661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档