iOS 中的堆与栈

本文探讨了计算机内存的四个部分,重点讲解了栈和堆的区别。栈主要用于存储函数调用信息和局部变量,而堆则用于管理对象。栈空间固定且由计算机自动管理,堆空间可变并需程序员手动管理。基础数据类型通常存储在栈中,但在特定情况下也可存于堆上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机的堆与栈,属于动态内存 dynamic memory

内存分为 4 部分:

Screen Shot 2021-01-21 at 1.46.06 AM.png

1, Code ( Text )

这个 segment, 储存将要被执行的程序 instructions

2, Static / Gloabl

放全局变量,和静态变量

这些变量,不是定义在函数中,

这些变量的生命周期,与程序的,保持一致

程序可以跑,就可以获取全局变量,和静态变量

3, Stack 栈区

存放 all the information of function calls

and all the local variables

存放局部变量 ( 函数执行的时候,才存在 ) 和,函数信息


上面 3 个 segment 的内存,程序运行的时候,不会增长 glow

对于基本数据类型,一般是存储到栈中的,它有没有可能存在堆上,什么情况下会存储到堆上?

栈和堆都是同属一块内存,

  • 栈,函数栈

高地址往低地址存储

栈,用来执行函数的

执行函数,就是一帧一帧的 fucntion frame , 放在栈顶 top 的过程

给程序的 stack, 保留 1 M 的空间

stack over flow, 就是函数嵌套调用,耗尽了给 stack 分配的空间

给定应用的 stack 固定的空间之后,应用不能要求更多了
栈上的内存,计算机自动打理

  • 堆, 对象堆

低地址往高地址存储,从下往上增长

Screen Shot 2021-01-21 at 1.45.27 AM.png

stack 栈空间具体大小,看操作系统

堆,用来管理对象的

程序的运行周期中,程序的堆空间,大小可以变化

栈上的内存,程序员手动打理

有 ARC 帮忙

堆 heap,又叫 free pool of momery,

free store of memory, dynamic memory

使用 heap , 也叫 dynamic memory allocation


他们并没有严格的界限说一个值只能放在堆上或者栈上。所以基本数据类型也是可以存储到堆上的。

当该基础类型变量被__block捕获时,该变量连同block都会被copy到堆上。


涉及到栈的,

stack on Call by reference

计算机的栈,与数据结构中的栈,有一点关系,行为上

计算机的堆,与数据结构中的堆,没有一点关系

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值