当前位置:网站首页>【内存管理概述 Objective-C语言】
【内存管理概述 Objective-C语言】
2022-08-10 01:01:00 【清风清晨】
前言
1.内存管理:
内存的作用:存储数据
内存管理的两个方面:
1)如何将数据存储到内存中
声明1个变量,然后将数据存储进去
2)当数据不再使用的时候,占用的内存空间如何被释放
一、内存中的五大区域
1)栈:局部变量,什么时候被释放呢?
if(1)
{
int num = 12;
}
大括号结束时,被释放。
局部变量,当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收。
num++;
这儿能不能num++?不能,因为执行到这句话时候,num已经不见了啊,已经从内存中消失了啊
2)堆:OC对象,malloc、realloc、calloc申请的空间,动态申请的空间。使用C函数申请的动态空间
3)BSS段:未初始化的全局变量和静态变量,一旦初始化就回收,并转存到数据段中
4)数据段(常量区):已经初始化的全局变量和静态变量,直到程序结束的时候才会被回收。
5)代码段:代码,程序结束的时候,系统会自动回收存储在代码段当中的数据。
6)栈 、 BSS段 、 数据段 、 代码段,存储在它们中的数据的回收,是由系统自动完成的。不需要我们干预。
二、堆里面的数据什么时候释放
1.例如:
有一个Person类,如下语句:
Person *p1 = [[Person alloc] init];
这个对象创建在哪儿的,堆里面的。
这句话用到了内存中的几个空间?
栈:
堆:
代码段:
这个p1是栈里面的数据,大括号执行完就回收。main函数执行完,p1就不见了,那这个对象呢?
1)这个对象需要被回收吗?需要
2)分配在堆区的这个OC对象,是肯定需要被回收的
iPhone:内存机制
App占用的内存达到了40M,系统就会给你发一个警告
占到45M,再给你发一个警告
占到120M,直接把你的程序给你退掉
2.堆中的OC对象,怎么被回收呢?
1)它会不会自动回收?不会
存储在堆区的OC对象,系统不会自动回收。
直到程序结束的时候,才会被回收。
2)内存管理的范围:
只需要管理存储在堆中的OC对象的回收,其他区域中的数据的回收是系统自动管理的。
边栏推荐
猜你喜欢
C# rounding MidpointRounding.AwayFromZero
阿里云OSS文件上传
Fedora 36 dnf 安装ModSecurity和 OWASP 核心规则集
Aptos 深度解读:机遇、挑战与风险
Quick responsiveness intelligent/smart responsiveness of polyethylene glycol type nano/reduction response hydrogels research and preparation
XSS详解及复现gallerycms字符长度限制短域名绕过
不是吧,连公司里的卷王写代码都复制粘贴,这合理?
Pagoda measurement - building LightPicture open source map bed system
万字总结:分布式系统的38个知识点
odoo公用变量或数组的使用
随机推荐
即时通讯开发如何撸一个WebSocket服务器
初步认识对象
【Swoole系列3.5】进程池与进程管理器
Fedora 36 dnf 安装ModSecurity和 OWASP 核心规则集
浏览器中location详解
Unity editor extension interface uses List
RedHat红帽RHEL7安装与使用,VMware Workstation16 Pro虚拟机的安装与使用
跨部门沟通的技巧
小程序中计算距离信息
Shader Graph learns various special effects cases
JVM :运行时数据区-虚拟机栈
【软考软件评测师】软件测试基础知识
Unity开发者必备的编辑器技巧
万字总结:分布式系统的38个知识点
解决sed替换文本,里面含有“/“、“#”等特殊字符的问题
22.括号生成
Interlay集成至Moonbeam,为网络带来interBTC和INTR
C语言头文件组织与包含原则
Prometeus 2.31.0 新特性
多线程之自定义线程池