计算机的堆与栈,属于动态内存 dynamic memory
内存分为 4 部分:
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 固定的空间之后,应用不能要求更多了
栈上的内存,计算机自动打理
- 堆, 对象堆
低地址往高地址存储,从下往上增长
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
计算机的栈,与数据结构中的栈,有一点关系,行为上
计算机的堆,与数据结构中的堆,没有一点关系
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。