Object-C堆和栈

内存区域划分

1. 栈区(stack)

1)程序运行时由编译器自动分配的一块连续的内容,存放函数的参数值,局部变量的值等

2)程序结束时由编译器自动释放

3) 栈由系统自动分配,程序员无法控制

4)只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

5)存取方式,先进后出

2. 堆区(heap)

1)在内存开辟另一块不连续的存储区域。一般由程序员分配释放,

2)若程序员不释放,程序结束时由系统回收

3)首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

3. 静态存储区(static)

编译器编译时分配内存。全局变量和静态变量的存储是放在一块的。

将变量定义的类型前加static,则该变量存储在静态存储区

static:

1)只初始化一次

2)只有程序退出才释放

4. 常量区

1) 常量占用内存,只读状态,决不可修改

2)常量字符串就是放在这里的,程序结束后由系统释放

5. 代码区

所有的语句编译后会生成CPU指令存储在代码区.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 喜欢的话记得点赞 一、内存管理:移动设备的内存及其有限,每一个APP所能占用的内存是有限制的二、什么行为会增加AP...
    甘哲157阅读 6,109评论 1 12
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,128评论 0 11
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,445评论 11 349
  • 天气转冷,天寒地冻里人似乎容易寂寞呢。特别是远在异地他乡的人,想家人想情人想朋友,想着自己此时没有朋友。 经常听到...
    静好_阅读 5,455评论 3 4
  • 一个单选的需求,虽说不到一个下午又被砍掉了,还是记录下 整个写下来说白了就是对 Cell 获取的 IndexPat...
    天空中的球阅读 8,141评论 2 5