記憶體五區到底是什麼?

2021-09-26 02:23:26 字數 1656 閱讀 6534

電場、磁場都是實際存在的物質,這些物質我們看不見摸不著,當它們出現時,我們都認為理所當然,而不會對其背後的理論與原理進行深究,我們追求的是實用性和幫我們解決問題。計算機也是如此,當組合語言和圖形介面出現之前,操作和使用計算機是少部分專業人的專利,與我們芸芸眾生相隔甚遠。而當計算機走入尋常生活時,哪怕我們對計算機一無所知,也不妨礙我們通過圖形介面使用應用軟體和操作計算機,我們只關心具體的術、而不在乎形而向上的道。

但是對於乙個開發者來說,我們只有在充分理解計算機背後的」道「基礎上,才能做到對具體術的游刃有餘。而這個修道的過程,恰恰是我們成長的過程。

計算機中有很多概念,計算機的學習實際是對概念的學習。看書閱讀是最基本的方式,但是最重要的還是需要自己動手練習和做專案,對於成年人來說,沒有什麼比任務式學習更有效。下面對記憶體五區進行簡單說明,希望以後能夠和大家互相討論,共同進步,畢竟終生學習不是口號,而是已經走近現實。

在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。 棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆非常相似,不過他們是通過free的方式釋放記憶體。

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

乙個典型程式的執行過程如下:

上圖來自網路

乙個函式的執行過程如下:

執行結果:p1:abcde,p2:abcde p1:3972,p2:3972

指標是程式語言中的重要概念,通常乙個人對指標的理解程度能夠從側面反映出他對一門程式語言的熟悉程度。關於指標,要記住和理解一下兩個結論:

1,指標指向誰,就把指向物件的位址賦給指標 比如這裡指標變數 p1 char *p1=「abcde」(位址oaxx),那麼「abcde」 的位址(oaxx)就會賦給指標p1。

2,指標變數和他所指向的記憶體空間變數是兩個不同的概念(指標本身也是乙個變數,只不過其記憶體中儲存的位址,而不是常量)

我們可以把記憶體空間想象成乙個個的抽屜,而把鑰匙想象成鑰匙,用現實中的具體事物來對應抽象概念,也能幫助我們更好地理解和掌握相關概念。

*關於筆者:

筆者理論物理碩士畢業後深圳工作,從事開發和專案管理四年,作為一名「非典型」開發人員,踩過很多坑,也真切地感受到自己在這過程中的成長。喜歡寫作、攝影、足球,去年圓夢,去巴塞隆拿看完梅西踢球後回到成都。四年韶華傾逝,轉眼接近30,期間有很多思考和見聞想要分享,相聚是緣,希望以後能借助這個平台和大家一起進步和成長。

敏捷到底是什麼?

文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...

我們到底是什麼?

我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...

SDN到底是什麼

sdn到底是什麼?雖然這個概念已經被炒到了,但還沒有人對其給出乙個明確的概念。盛科網路總監張衛峰撰寫了自己關注sdn以來,對其認識的四個階段,最後乙個階段又回到了sdn字面的意思軟體定義網路,每個階段作者的新觀點,也會給我們帶來一些啟發。以下為原文 我對sdn的認識可以分為四個階段,最後乙個階段是在...