推广

iOS 内存概述

iseeyu2年前 (2024-02-22)推广124

内存分区

栈区(Stack)

  • 高地址向低地址扩展的系统数据结构,对应的进程或者线程是唯一的
  • 是一块连续的内存区域,遵循先进后出(FILO)原则
  • 运行时分配,在iOS中以0x7开头
  • 由编译器自动分配并释放的,主要用来存储:局部变量、函数参数(如隐藏参数(id self, SEL _cmd))

优缺点

  • 优点:因为栈是编译器自动分配并释放的,不会产生内存碎片,快速且高效
  • 缺点:栈的内存大小有限制,数据不灵活
    • iOS主线程大小是1MB,其他线程是512KB
    • MAC上是8MB

堆区(Heap)

  • 堆是由低地址向高地址扩展的数据结构
  • 不连续的内存区域,类似链表结构(便于增删,不便于查找),遵循先进先出(FOFI)原则
  • 运行时分配的,在iOS中以0x6开头
  • 程序员动态分配和释放的,如果程序员没有释放,在程序结束后由系统回收,主要用来存储:开辟空间创建对象
  • 访堆中内存时,一般需要通过对象读取到栈区的指针地址,然后通过指针地址访问堆区

优缺点

  • 优点:灵活方便,适应面广泛
  • 缺点:需要手动管理,速度慢,容易产生内存碎片

全局区\静态区(.bss&.data)

  • 编译时期分配的内存空间,在程序运行期间,数据一直存在,程序结束后系统释放
  • 在iOS中一般以0x1开头
  • 可读可写区域

主要用来存放:

  • 未初始化全局变量静态变量,即BSS区
  • 已初始化全局变量静态变量,即DATA区

    • 全局变量是指变量值可以在运行时被动态修改,而静态变量static修饰的变量,包含静态局部变量静态全局变量

常量区(.rodata)

  • 编译时期分配的内存空间,程序结束后系统自动释放
  • 只读区域
  • 主要存放:已经使用且没有指向的字符串常量
  • 字符串常量因为可能在程序中多次使用,所有在程序运行前提前分配内存

代码区(.text)

  • 编译时分配
  • 只读区域
  • 主要存放:程序运行的代码,代码会编译成二进制存到内存

函数栈(栈帧)

  • 函数在运行中且未完成时期占用的一块独立的连续内存区域
  • 每一个线程都有专用的栈空间,该栈空间可以在线程期间自由使用,当前线程的函数共享改栈空间,每一个函数使用的栈空间是一个栈帧,所有的栈帧组成了这个线程完整的栈
  • 函数的调用是发生在栈上,每一个函数的相关信息(局部变量,调用记录等)都存储在一个栈帧中,每执行一次函数调用就会生成一个新的栈帧,然后将其压入函数栈,当函数执行结束时,则将函数对应的栈帧出栈并释放

堆栈溢出

一般情况下我们是不需要考虑堆栈的大小问题,但是堆栈不是无上限的,过多的递归会导致栈溢出过多的alloc会导致堆溢出

预付堆栈溢出的方法:

  • 避免层次过深得递归调用
  • 不要使用过多的局部变量,控制局部变量大小
  • 避免占用大内存的对象的分配,及时释放
  • 在适当情况下调用系统API修改线程的堆栈大小

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56135.html

相关文章

淘宝千牛客服回复率怎么查(淘宝客服回复率在哪看)

淘宝千牛客服回复率怎么查(淘宝客服回复率在哪看)

先登录账号,进入到卖家中心,将鼠标放到导航栏的“店铺”这里,点击体验报告,滑动鼠标往下拉,点击点击【咨询体检】,就可以查看客服回复率。...

《道德经》最厉害八种思维,读完真的不一样!!

一、对立统一的老子认为,高下,美丑,前后,祸福这些都是相辅相成、对立统一的,甚至在某种条件下是可以相互转化的所谓:祸兮福所倚,福兮祸所伏。这是中国古代最伟大的辩证法思想,让我们看到对立物之间的真实关系。二、逆向思维春秋时期,儒家提倡仁爱、礼义和忠孝,认为只有仁爱、礼义和忠孝...

从产品包装设计理念了解品牌营销策划方向。

从产品包装设计理念了解品牌营销策划方向。

你想知道产品包装设计在品牌推广环境中的重要性吗?包装设计是营销中重要的因素,因为消费者首先会从产品包装设计中了解你的业务。制造商每年在全球的产品包装上花费超过1500亿美元。对于要销售的产品,大约相当于7到10美分。许多包装设计的目的是使产品看起来有吸引力,以方便消费或防止可能的损害。如果你是一个...

如何站在用户和运营策略角度去提升转化率。

如何站在用户和运营策略角度去提升转化率。

前两天跟行业朋友聊到这个话题“如何提升转化率”。我觉的“转化率像是一场修行,永远在参透,持续在优化”。对于任何一家互联网平台而言转化率CR应该都是核心目标之一。游戏业务考量玩家活跃到付费的转化;广告业务考量曝光到访问的转化;电商业务考量消费者从访问到下单成功的转化。转化的本质是在于商业化流量,如何高...

西安SEO新型SEO与传统SEO的区别。

西安SEO新型SEO与传统SEO的区别。

伴随着新媒体的迅速发展,针对搜索引擎来说 ,SEO人员在不断谈论,未来SEO行业的发展变化,并在近期各大搜索引擎悄然变更中,初见端倪。 这就有了新型SEO与传统SEO的讨论,时代会变,SEO同意会改变,但可以落地成什么样子,从现阶段来看,他依然充满悬念。 下面西安SEO跟大家分享...

淘宝如何自己开店,申请店铺(在淘宝上怎么申请开店铺啊)

淘宝如何自己开店,申请店铺(在淘宝上怎么申请开店铺啊)

自己开店要学会选品,选对了产品,后续的销量才容易上来,同时要提前做好店铺定位,确定自己卖什么产品,店铺是什么档次,再根据这些来推广运营,这样之后的运营相对就会简单很多。...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片