iOS 的内存与存储区域
来源:互联网 发布:ubuntu ufw iptables 编辑:程序博客网 时间:2024/05/23 01:02
栈区(stack)
概述:栈是向低地址扩展的数据结构,是一块连续的内存区域。由栈顶的地址和栈的最大容量是系统预先规定好的。栈的空间很小,大概1-2M。超出overflow。
使用:栈区,就是函数(方法)运行时向系统请求的内存。栈中的局部变量,参数由编译器分配和释放,函数运行就分配,函数结束就释放,由系统完成。是系统数据结构,对应进程唯一。
特别注意:系统栈的剩余空间 大于 所申请的空间,系统为程序提供内存,不然,报错异常,提示栈的溢出。
堆区(heap)
概述:堆是向高地址扩展的数据结构,不连续的内存区域。系统用链表储存空闲地址的。链表遍历由低向高。堆大小直接受设备有效虚拟内存影响。
1.首先应该知道操作系统有一个记录空闲内存地址的链表。2.当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。3.由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中
使用: 存放实体对象的。由程序员分配和释放(arc自动插入分配和释放代码),例如alloc 申请的会放入堆中。
全局\静态区(static)
静态变量和全局变量是存储在一起的。初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后有系统释放。
int a;//未初始化的静态区int b = 10;//初始化的静态区
文字常量区
存放常量字符串,程序结束系统释放
程序代码区
存放函数的二进制代码
相关经典面试题
这段代码有什么问题,哪一方面的,怎么优化呢?
- (void) interviewForStackMemory{ for (int i = 0;i<1000000;i++) { NSString *str = @"小萝莉"; str = [str stringByAppendingString:@"是春哥的"]; }}
以下数据和变量都存储在那一类内存中
int a;int c = 10;NSString *name1;NSString *name2 = @"lxx";- (void) interviewForStore{ int b; NSString *name3 = @"hyc"; NSString *name4; char h[] = "plm"; static int k = 0; NSString *m = [[NSString alloc]initWithFormat:@"le"];}
阅读全文
0 0
- iOS 的内存与存储区域
- 内存存储区域的讨论
- 内存存储区域的讨论
- 类的内存存储区域
- C++内存存储区域的划分
- Java的内存存储区域划分
- java的内存区域与内存溢出
- 指针与数组不同的存储区域
- java内存区域与对象的访问
- C++内存存储区域简介
- <C++>内存存储区域划分
- C语言程序的存储区域和内存布局
- C语言程序的存储区域--内存布局
- Java代码的内存分配和存储区域
- [IOS 开发] 内存管理的几大区域
- Java内存区域与内存溢出异常-内存区域
- 特殊的内存区域
- Java的内存区域
- 淘淘商城系列——单点登录接口文档分析
- Ubuntu 16.04安装ssh远程登录主机服务器
- 欢迎使用CSDN-markdown编辑器
- java调用指定浏览器打开指定网址
- Discuz!教程之如何设置上传的某些类型附件不改为.attach拓展名
- iOS 的内存与存储区域
- 滚动数组写矩阵快速幂
- SparkContext的parallelize的参数作用以及MapValues
- nodejs session MD5加密学习笔记
- 修复warning:Constraint referencing items turned off in current configuration
- 安装卸载更新boost.asio以及跑通demo全过程
- synchronized关键字锁住的是对象还是代码块
- WatchKit(一):创建一个Apple Watch应用
- matlab判断两线段是否相交