1.iOS内存分区

说到内存,我们一般会讲到RAM和ROM,RAM与ROM就是具体的存储空间,统称为存储器。

  • RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储,例如内存条。
  • ROM(read only memory):存储性内存,可以掉电存储,例如SD卡、Flash(机械磁盘也可以简单的理解为ROM)。

内存分区

说到内存分区,这里的内存指的就是RAM(random access memory)
内存分为五个区:栈区(系统管理的地方)、堆区(程序员控制的地方)、静态区(全局区)常量区代码区

1、栈区(stack): 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。

  • 快速高效,但是有限制,数据不灵活。[先进后出]
  • 栈空间分:静态分配动态分配两种。
  • 静态分配是编译器完成的,比如自动变量(auto)的分配。
  • 动态分配由alloca函数完成。
  • 栈的动态分配无需释放(是自动的),也就没有释放函数。
  • 为可移植的程序起见,栈的动态分配操作是不被鼓励的!

2、堆区(heap):由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收 ,比如变量通过new、alloc、malloc、realloc分配的内存块就存放在堆区。

  • 灵活方便,数据适应面广泛,但是效率有一定降低。[顺序随意]
  • 堆是函数库内部数据结构,不一定唯一。
  • 不同堆分配的内存无法互相操作。
  • 堆空间的分配总是动态的
  • 虽然程序结束时所有的数据空间都会被释放回系统,但是精确的申请内存,释放内存匹配是良好程序的基本要素。

3、全局区(静态区) (static): 全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后由系统释放。

注意:全局区又可分为未初始化全局区(BSS段)和初始化全局区(DATA段)。
举例:int a;未初始化的;int a = 10;已初始化的。

4、文字常量区: 存放常量字符串,程序结束后由系统释放

5、程序代码区: 存放函数的二进制代码

#import "ViewController.h"

@interface ViewController ()

@end

//age存放在<未初始化的全局静态区(BSS区)>
NSInteger age;
 
//age存放在<已初始化的全局静态区(DATA区)>
NSInteger score = 100;
 
//@"SunSatan"存放在<常量区>,name存放在<已初始化的全局静态区>
NSString *name = @"SunSatan";
 
//titleStr存放在<已初始化的全局静态区>
static NSString *titleStr = @"SunSatan";

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    int flag;//flag存放在<栈区>
    NSString *number = @"8090";//number存放在<栈区>
    
    //array_1、array_2存放在<堆区>
    NSArray *array_1 = [[NSArray alloc]init];
    NSArray *array_2 = [NSArray array];
    
    //array_3存放在<栈区>
    NSArray *array_3 =@[];
    
    //total存放在<栈区>
    NSInteger total = [self getTotalNumber:1 number2:1];
}

- (NSInteger)getTotalNumber:(NSInteger)number1 number2:(NSInteger)number2{
    return number1 + number2;//number1和number2 栈区
}

@end

总结:

  • 在编译阶段代码区、常量区、全局/静态区就已经分配完成并且大小固定,所以指向这些区的指针不会产生崩溃性的错误。
  • 栈区和堆区内存分配随着程序运行而变化(堆的创建销毁,栈的弹入弹出)。
    • 栈:由系统自动分配,速度较快,不会产生内存碎片 [先进后出]
    • 堆:由程序员通过alloc等函数申请的内存,速度比较慢,而且容易产生内存碎片,不过用起来最方便

打个比喻来说:

  • 使用栈就像我们去饭馆里吃饭,只管点菜(发出申请)、付钱和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
  • 使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • 内存有五大区域 从高地址到低地址分别为:栈区、堆区、全局区/静态区、常量区、代码区 栈和堆是运行时分配,全局区/静...
    th先生阅读 1,110评论 0 0
  • 1 RAM ROM RAM:运行内存,不能掉电存储。ROM:存储性内存,可以掉电存储,例如内存卡、Flash。 由...
    LikeSomeBody阅读 767评论 0 1
  • iOS内存分区 引言 iOS的存储器包括RAM(random access memory,运行内存)和ROM(Re...
    荒漠现甘泉阅读 748评论 0 4
  • 我对系统认知初体验。 从毕业到现在工作了一年多,一直从事后台系统相关的工作;先抛自己的结论,看系统主要看四个方面:...
    小马达在路上阅读 360评论 0 0
  • 生活如海、宽容作舟 泛舟于海, 方知海之宽阔; 生活如歌、宽容是曲, 和曲而歌, 方知生活之甜美。 以德报恩, 良...
    流糖阅读 211评论 3 5