《程式設計師的自我修養》筆記八 記憶體

2021-09-20 03:35:54 字數 941 閱讀 7497

linux 系統為核心分配 1g 記憶體,windows 系統為核心分配 2g 空間,剩餘的記憶體供使用者程式使用。

使用者空間的劃分

電腦科學中的棧

一種存放資料的特殊容器,入棧出棧規則是 filo

計算機系統中的棧

具有以上屬性的動態記憶體區域,入棧使棧增大,棧頂位址變小,出棧使棧減小,棧頂位址增大

儲存函式呼叫時所需的維護資訊,棧上的資料在函式返回時就被釋放掉 ,無法將資料傳遞至函式外部

棧的內容

函式的返回位址和引數

臨時變數,如函式的費靜態區域性變數以及編譯器自動生成的其他臨時變數等

儲存的上下文,函式呼叫前後所需要保持不變的暫存器

堆是一塊巨大的記憶體,佔據整個虛擬空間的絕大部分,程式可以申請一塊連續記憶體,自由使用,在程式主動放棄之前都會一直有效。

堆分配演算法按需分配、釋放其中的空間。有以下幾種方式:

把堆中各個空閒的塊按照鍊錶方式連線,使用者請求一塊空間時,遍歷整個列表,找到合適大小的塊並將它拆分,當使用者釋放空間時將它合併到空間鍊錶中

將堆劃分為大量的塊(block),每個塊大小相同,使用者請求記憶體是,分配數個塊的空間給使用者,第乙個稱為頭(head),其餘稱為主體(body),用整數陣列記錄塊的使用情況,每個塊只有頭/主體/空閒三種狀態

如果每次分配空間大小都一樣,就按照該大小將堆劃分為大量的小塊,每次請求只需要找到乙個小塊即可。

《程式設計師的自我修養》筆記

以下是我讀此書時作的一些筆記,當然書中還有很多值得參考的想法,就不一一枚舉了。一萬小時說法 這個說法很普遍了,它再次提醒了我如何去做乙個領域的專家。如果平均每天八小時在這個領域上,那麼一年300天 300 8 2400,保持這種學習激情在上面,五年內就可以成為專家了,我算了算自己在這個領域投入的時間...

程式設計師的自我修養

一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...

程式設計師的自我修養

一忌 輕易言敗,沒有自信 沒有永不放棄精神的程式設計師,只是乙個有程式設計師名號的假程式設計師。乙個真正的程式設計師,知道在程式設計的過程中,可能會遇到不計其數的困難和問題,可能有極多的挫折和失敗,而成功只有一次。就為解決乙個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。乙個問題解決了...