内存分区

作者: taobingzhi | 来源:发表于2019-03-08 16:14 被阅读6次

简述内存分区情况:

  • 代码区:存放函数二进制文件代码;
  • 数据区:存放静态变量,常量,全局变量;
  • 栈区:由高地址向下开辟的一块连续的内存空间,先进后出,所以不会有碎片问题,由编译器控制释放,无需手动释放,因此更有效率,分为静态分配(编译器完成分配,如局部变量)和动态分配(如alloc函数进行分配,由编译器自动释放)。栈的大小是编译器自动分配的,所以如果申请的内存空间大于剩余内存大小,会overflow。
  • 堆区:由低地址向上的不连续内存空间,频繁的new/delete会造成内存碎片,降低运行效率。堆需要手动释放,回收内存。堆的内存空间更大,更灵活。

ps:oc中基本数据类型(int,double,float...)是在栈区,无需手动释放,超过作用域自动释放;对象(NSObject及其子类)是在堆区,需要手动释放release,回收内存。

pps:这里插一下,为什么block要用copy修饰符,因为block本质上是代码块,在栈区,为了防止生命周期结束自动被释放需要copy到堆区。


Better Late Than Never!
努力是为了当机会来临时不会错失机会。
共勉!

相关文章

  • 操作系统-存储管理

    为什么内存要分区?分区有哪些类型? 内存分区是为了方便地支持多程序运行。分区管理分为固定分区和可变分区,固定分区是...

  • C++运算符重载实现(加号、左移、递增、赋值、关系运算符、函数调

    先来复习一下C++的内存分区问题~ C++内存分区 C++程序的内存分区可划分为四大内存分区:堆、栈、全局/静态存...

  • extern const static

    内存分区简介 | 内存分区 | 保存内容 | 是否可读写 | 是否手动释放 ...

  • linux运维之磁盘分区方案

    不同场景的分区: 1)普通分区形式: /boot 引导分区 256Mswap 交换分区 内存大于8G,给8G。内存...

  • linux系列10-交换分区Swap

    虚拟内存提升内存的容量,防止OOM(Out of Memory) -查看当前的交换分区 -增加交换分区基本分区,L...

  • 【String类】对象内存分配详解

    关于内存分区参见:Java内存详解 - 内存分区 本文重点描述String对象创建时的内存分配方式。 字符串常量池...

  • swap分区的创建及启动关闭

    Swap分区又称为交换分区,通常是在硬盘中预留一块分区作为swap交换分区,当系统内存出现不足时,系统会将空闲内存...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • 内存分区

    原文章:https://blog.csdn.net/Damonvv/article/details/4715346...

  • 内存分区

    内存分区注意事项:1 在iOS中,堆区的内存是应用程序共享的,堆中的内存分配是系统负责的。2 系统使用一个链表来维...

网友评论

    本文标题:内存分区

    本文链接:https://www.haomeiwen.com/subject/mogrpqtx.html