iOS 資料結構
阿新 • • 發佈:2020-06-24
- 陣列和連結串列的區別
- 陣列 地址連續,查詢速度快,操作效率低 儲存單元在定義時分配,元素個數固定,記憶體空間要求高
- 連結串列 地址不連續,查詢速度慢,操作效率高 儲存單元在程式執行時動態申請,可按需動態增減
- iOS記憶體分割槽的情況,五大區域
- 棧區
Stack
先進後出FILO
由編譯器自動分配和釋放 棧空間多執行緒不共享 連續的記憶體地址,由高向低分配,不會產生碎片 空間較小,執行速度較快,效率高 棧是機器系統提供的資料結構,計算機會在底層對棧提供支援:分配專門的暫存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高 - 堆區
Heap
分配方式類似連結串列,先進先出FIFO
C/C++
函式庫提供的,加上碎片問題,導致堆的效率比棧低 - 全域性區
全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域
.data段
,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域.bss段
程式結束後由系統釋放 - 常量區 常量字串就是放在這裡的 程式結束後由系統釋放
- 程式碼區 存放函式體的二進位製程式碼
- 當一個app啟動後,程式碼區、常量區、全域性區大小就已經固定,因此指向這些區的指標不會產生崩潰性的錯誤。而堆區和棧區是時時刻刻變化的(堆的建立銷燬,棧的彈入彈出),所以當使用一個指標指向這個區裡面的記憶體時,一定要注意記憶體是否已經被釋放,否則會產生程式崩潰(也即是野指標報錯)
-
Hash
表 雜湊表(Hash table
,也叫散列表
)是根據鍵Key
直接訪問在記憶體中儲存位置的資料結構。也就是說,它通過計算一個關於鍵值的函式
,將所需查詢的資料
對映到表中一個位置來訪問記錄,這加快了查詢速度。這個對映函式叫做雜湊函式
,存放記錄的陣列叫做散列表
。通俗講就是把Key
通過一個固定的演演算法函式(hash函式)
轉換成一個整型數字
,然後就對該數字用陣列的長度進行取餘
,取餘結果就當作陣列的下標
,將value
儲存在以該數字為下標的陣列
空間裡。當使用hash
表查詢時,就是使用hash
函式將key
轉換成對應的陣列下標
,並定位到該下標的陣列空間裡獲取value
,這樣就充分利用到陣列的定位效能進行資料定位 -
iOS
裡有哪些地方用到了Hash
表