IOS基礎知識梳理(2)

2021-07-03 14:43:37 字數 924 閱讀 8907

堆和棧的區別

管理方式:

對於棧來講,是由編譯器自動管理,無需我們手工控制;

對於堆來說,釋放工作由程式設計師控制,容易產生memory leak。

申請大小:

棧:在windows下,棧是向低位址擴充套件的資料結構,是一塊連續的記憶體的區域。這句話的意思是棧頂的位址和棧的最大容量是系統 預先規定好的,在windows下,棧的大小是2m(也有的說是1m,總之是乙個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示 overflow。因此,能從棧獲得的空間較小。

堆:堆是向高位址擴充套件的資料結構,是不連續的記憶體區域。這是由於系統是用鍊錶來儲存的空閒記憶體地 址的,自然是不連續的,而鍊錶的遍歷方向是由低位址向高位址。堆的大小受限於計算機系統中有效的虛擬記憶體。由此可見,堆獲得的空間比較靈活,也比較大。

碎片問題:

對於堆來講,頻繁的new/delete勢必會造成記憶體空間的不連續,從而造成大量的碎片,使程式效率降低。

對於棧來講,則不會存在這個 問題,因為棧是先進後出的佇列,他們是如此的一一對應,以至於永遠都不可能有乙個記憶體塊從棧中間彈出

分配方式:

堆都是動態分配的,沒有靜態分配的堆。

棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由 alloca函式進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。

分配效率:

棧是機器系統提供的資料結構,計算機會在底層對棧提供支援:分配專門的暫存器存放棧的位址,壓棧出棧都有專門的指令執行,這就決定了棧的 效率比較高。

堆則是c/c++函式庫提供的,它的機制是很複雜的。

IOS基礎知識梳理(1)

readwrite,readonly,assign,retain,copy,nonatomic等等屬性的作用?readwrite 此標記說明屬性會被當成讀寫的,這也是預設屬性。設定器和讀取器都需要在 implementation中實現。如果使用 synthesize關鍵字,讀取器和設定器都會被解析。...

css2基礎知識梳理

基礎的css知識,只放xmind的截圖。轉 via.wang 布局中所遵循的規範或是通例 一般是遵循從上到下,從左到右的乙個順序。從頁面的穩定性上來說,優先考慮使用標準流,其次考慮浮動或定位。遵循標準流的元素中,又以寬高最穩定,先把大的框架例項化出來,再進行細節的布局。能用padding 的優先考慮...

IP基礎知識梳理

離開學校後看書少了很多,發現掌握的ip知識不是很牢,所以在這裡也稍稍梳理下,感覺語言也沒書本上詳盡 完全是筆記形式,望讀者勿噴 ip層 網路層也叫internet層,負責將分組報文從源端傳送到目的端。作用 tcp ip模型 參考 即整個網路上傳送的二進位制資料總結為如下格式 後的鏈路配置為trunk...