iOS中的内存大致可以分为代码区,全局/静态区,常量区,堆区,栈区。

1.代码区

代码段是用来存放可执行文件的操作指令(存放函数的二进制代码),也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。

2.全局/静态区

全局/静态区存放的是静态变量,静态全局变量,以及全局变量。初始化的全局变量,静态变量,静态全局变量存放在同一区域,未初始化的变量存放在相邻的区域。程序结束后由系统释放。

3.常量区

常量区存放的就是字符串常量,int常量等这些常量。

4.栈区

这块区域是由编译器自动分配并释放的,栈区存放的是函数的参数及自动变量。栈是向低地址扩展的一块连续的内存区域。分配在栈上的变量,当函数的作用域结束,系统就会自动销毁变量。

5.堆区

堆区内存一般是由程序员自己分配并释放的。当我们使用alloc来分配内存时分配的内存就是在堆上。由于我们现在大部分都是使用ARC,所以现在堆区的分配和释放也基本不需要我们来管理。堆区是向高地址扩展的一块非连续区域。

下面通过代码来看一下内存的分配

int a = 1;//全局变量分配在全局/静态区

static int b = 2;//静态全局变量分配在全局/静态区

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

static int c = 3;//静态局部变量分配在全局/静态区

int d = 4;//自动变量分配在栈区

NSString *string = @"abcd";//string自动变量分配在栈区,后面的字符串常亮分配在常量区

NSArray *array = [[NSArray alloc] init];//array自动变量分配在栈区,后面创建的oc对象分配在堆区,栈区的指针指向堆区的对象。

}

iOS的内存分配的更多相关文章

  1. iOS 中内存分配与分区

    关于RAM ROM RAM与ROM就是具体的存储空间,统称为存储器 RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储.它又分为: 动态 ...

  2. iOS程序中的内存分配 栈区堆区全局区

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同.一.内存分区 栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对 ...

  3. iOS开发——C篇&动态内存分配

    再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数 再 ...

  4. iOS 内存分配与分区

    RAM ROM RAM:运行内存,不能掉电存储. ROM:存储性内存,可以掉电存储,例如内存卡.Flash. 由于 RAM 类型不具备掉电存储能力(即一掉电数据消失),所以 app 程序一般存放于 R ...

  5. iOS — 内存分配与分区

    1  RAM ROM RAM:运行内存,不能掉电存储.ROM:存储性内存,可以掉电存储,例如内存卡.Flash.      由于RAM类型不具备掉电存储能力(即一掉电数据消失),所以app程序一般存放 ...

  6. [转]ios平台内存常见问题

    本文转自CocoaChina,说的满详细的: 链接地址:http://www.cocoachina.com/bbs/read.php?tid=94017&keyword=%C4%DA%B4%E ...

  7. iOS优化内存方法推荐

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你 ...

  8. iOS Instruments内存检测使用

    Instruments 可以帮我们了解到应用程序使用内存的几个方面: 全局内存使用情况(Overall Memory Use): 从全局的角度监测应用程序的内存使用情况,捕捉非预期的或大幅度的内存增长 ...

  9. iOS基础 - 内存分析

    一.内存的重要性 程序是否可用的最根本的制约因素. 十分影响用户体验. 程序的crash有很多情况都是内存的原因. 二.iOS平台内存警告机制 iOS系统不支持虚拟内存,一旦出现内存不足的情况,iOS ...

随机推荐

  1. 一切皆文件-文件是对IO的最简抽象

    引用<Linux Kernel Development>原书里面的一句话 in Unix, everything is a file.This simplifies the manipul ...

  2. ADF系列-2.EO的高级属性

    在上一篇博客 ADF系列-1.EO的各个属性初探 中介绍了EO的一些常用简单属性.本次将介绍EO中一些比较常用的一些高级属性 一.基于Sequence创建EO,一下介绍三种方式(以HR用户的Emplo ...

  3. node express 跨域问题

    express = require('express'); var app = express(); //设置跨域访问 app.all('*', function(req, res, next) { ...

  4. Myeclipse 自带Tomcat启动8080端口占用

    在启动Myeclipse自带的Tomcat发现报错,显示8080端口被占用 第一步:window+r 组合键,调出命令窗口. 第二步:输出命令:netstat -ano|findstr 8080   ...

  5. Codeforces Round #533 (Div. 2) B. Zuhair and Strings 【模拟】

    传送门:http://codeforces.com/contest/1105/problem/B B. Zuhair and Strings time limit per test 1 second ...

  6. 如何调试在OJ中的代码

    在OJ上的原始程序: class Solution { public: ) return; ; ; while(*str != '\0'){ if(*str == ' '){ blank++; len ...

  7. 关于 Vue.js+Element-UI 日期控件 日期范围选择

    理想效果 : 也就是说前面时间框的时间能选的范围应该小于等于后面的时间框; 后面时间框能选的范围应该大于等于前面的时间框; 示例代码 : 页面: <el-form-item label=&quo ...

  8. easyui分页的使用方法

    使用: $("#tt").datagrid("getPager").pagination(option); 例子: $("#tb").dat ...

  9. 【luogu P2296 寻找道路】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2296 题意:给定起点终点,找一条从起点到终点的最短路径使路上的每个点都能有路径到达终点. 我们先反着建一遍图 ...

  10. 【C++ Primer】读书笔记_第一章

    Main(): 1. C++程序必须包含main()函数,操作系统通过调用main来运行C++程序. 2. main()的形参可以为空. 3. main函数的返回类型必须为int,返回给操作系统.in ...