1. 程式人生 > IOS開發 >iOS 資料結構

iOS 資料結構

  1. 陣列和連結串列的區別
  • 陣列 地址連續,查詢速度快,操作效率低 儲存單元在定義時分配,元素個數固定,記憶體空間要求高
  • 連結串列 地址不連續,查詢速度慢,操作效率高 儲存單元在程式執行時動態申請,可按需動態增減
  1. iOS記憶體分割槽的情況,五大區域
  • 棧區Stack 先進後出FILO 由編譯器自動分配和釋放 棧空間多執行緒不共享 連續的記憶體地址,由高向低分配,不會產生碎片 空間較小,執行速度較快,效率高 棧是機器系統提供的資料結構,計算機會在底層對棧提供支援:分配專門的暫存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高
  • 堆區Heap 分配方式類似連結串列,先進先出FIFO
    一般需要手動分配和釋放 堆記憶體多執行緒共享 不連續的記憶體地址,由低向高分配,容易產生碎片 空間較大,執行速度較慢,效率不如棧 計算機底層並沒有對堆的支援,堆是有C/C++函式庫提供的,加上碎片問題,導致堆的效率比棧低
  • 全域性區 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域.data段,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域.bss段 程式結束後由系統釋放
  • 常量區 常量字串就是放在這裡的 程式結束後由系統釋放
  • 程式碼區 存放函式體的二進位製程式碼

記憶體分割槽

  • 當一個app啟動後,程式碼區、常量區、全域性區大小就已經固定,因此指向這些區的指標不會產生崩潰性的錯誤。而堆區和棧區是時時刻刻變化的(堆的建立銷燬,棧的彈入彈出),所以當使用一個指標指向這個區裡面的記憶體時,一定要注意記憶體是否已經被釋放,否則會產生程式崩潰(也即是野指標報錯)
  1. Hash表 雜湊表(Hash table,也叫散列表)是根據鍵Key直接訪問在記憶體中儲存位置的資料結構。也就是說,它通過計算一個關於鍵值的函式,將所需查詢的資料對映到表中一個位置來訪問記錄,這加快了查詢速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表。通俗講就是把Key通過一個固定的演演算法函式(hash函式)轉換成一個整型數字,然後就對該數字用陣列的長度進行取餘,取餘結果就當作陣列的下標,將value儲存在以該數字為下標的陣列空間裡。當使用hash表查詢時,就是使用hash函式將key轉換成對應的陣列下標,並定位到該下標的陣列空間裡獲取value,這樣就充分利用到陣列的定位效能進行資料定位

  2. iOS裡有哪些地方用到了Hash

附:我的部落格地址