Stack
先進後出FILO
由編譯器自動分配和釋放 棧空間多線程不共享 連續的內存地址,由高向低分配,不會產生碎片 空間較小,運行速度較快,效率高 棧是機器系統提供的數據結構,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高Heap
分配方式相似鏈表,先進先出FIFO
通常須要手動分配和釋放 堆內存多線程共享 不連續的內存地址,由低向高分配,容易產生碎片 空間較大,運行速度較慢,效率不如棧 計算機底層並無對堆的支持,堆是有C/C++
函數庫提供的,加上碎片問題,致使堆的效率比棧低.data段
,未初始化的全局變量和未初始化的靜態變量在相鄰的另外一塊區域.bss段
程序結束後由系統釋放Hash
表 哈希表(Hash table
,也叫散列表
)是根據鍵Key
直接訪問在內存中存儲位置的數據結構。也就是說,它經過計算一個關於鍵值的函數
,將所需查詢的數據
映射到表中一個位置來訪問記錄,這加快了查找速度。這個映射函數叫作散列函數
,存放記錄的數組叫作散列表
。通俗講就是把Key
經過一個固定的算法函數(hash函數)
轉換成一個整型數字
,而後就對該數字用數組的長度進行取餘
,取餘結果就看成數組的下標
,將value
存儲在以該數字爲下標的數組
空間裏。當使用hash
表查詢時,就是使用hash
函數將key
轉換成對應的數組下標
,並定位到該下標的數組空間裏獲取value
,這樣就充分利用到數組的定位性能進行數據定位git
iOS
裏有哪些地方用到了Hash
表 github
附:個人博客地址算法