日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios内存概述

發(fā)布時間:2024/1/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios内存概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

iOS內(nèi)存管理

在iOS中內(nèi)存分為五大區(qū)域:棧去、堆區(qū)、全局區(qū)、常量區(qū)、代碼區(qū)

  • 棧內(nèi)存
    1、高地址向低地址擴展。
    2、一塊連續(xù)的內(nèi)存區(qū)域,遵循先進后出的原則。
    3、運行時分配,在iOS中以0x7開頭
    4、由編譯器自動分配并釋放
    5、局部變量、函數(shù)參數(shù)

  • 堆內(nèi)存
    1、低地址向高地址擴展
    2、不連續(xù)的內(nèi)存區(qū)域,類似于鏈表,遵循先進先出的原則。
    3、運行時分配的,在iOS中以0x6開頭
    4、程序員動態(tài)分配和釋放的
    5、訪問堆中內(nèi)存時,一般需要通過對象讀取到棧區(qū)的指針地址,然后通過指針地址訪問堆區(qū)

  • 全局區(qū)/靜態(tài)區(qū)
    1、編譯時期分配的內(nèi)存空間
    2、在iOS中一般以0x1開頭
    3、可讀可寫區(qū)域
    4、分為BSS區(qū)和DATA區(qū)。
    BSS區(qū):未初始化的全局變量和靜態(tài)變量。
    DATA區(qū):已初始化的全局變量和靜態(tài)變量。
    (全局變量是指變量值可以在運行時被動態(tài)修改,而靜態(tài)變量是static修飾的變量,包含靜態(tài)局部變量和靜態(tài)全局變量)

  • 常量區(qū)
    1、編譯時期分配的內(nèi)存空間
    2、只讀區(qū)域
    3、主要存放:已經(jīng)使用且沒有指向的字符串常量
    4、在程序運行前提前分配內(nèi)存

  • 代碼區(qū)
    1、編譯時分配
    2、只讀區(qū)域
    3、主要存放:程序運行的代碼

函數(shù)棧(棧幀)

函數(shù)在運行中且未完成時期占用的一塊獨立的連續(xù)內(nèi)存區(qū)域

每一個線程都有專用的棧空間,該棧空間可以在線程期間自由使用,當前線程的函數(shù)共享改棧空間,每一個函數(shù)使用的棧空間是一個棧幀,所有的棧幀組成了這個線程完整的棧

函數(shù)的調(diào)用是發(fā)生在棧上,每一個函數(shù)的相關(guān)信息(局部變量,調(diào)用記錄等)都存儲在一個棧幀中,每執(zhí)行一次函數(shù)調(diào)用就會生成一個新的棧幀,然后將其壓入函數(shù)棧,當函數(shù)執(zhí)行結(jié)束時,則將函數(shù)對應的棧幀出棧并釋放

堆棧溢出
一般情況下我們是不需要考慮堆棧的大小問題,但是堆棧不是無上限的,過多的遞歸會導致棧溢出,過多的alloc會導致堆溢出
預付堆棧溢出的方法:

避免層次過深得遞歸調(diào)用
不要使用過多的局部變量,控制局部變量大小
避免占用大內(nèi)存的對象的分配,及時釋放
在適當情況下調(diào)用系統(tǒng)API修改線程的堆棧大小

總結(jié)

以上是生活随笔為你收集整理的ios内存概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。