1 內(nèi)存
【原創(chuàng)】轉(zhuǎn)載,引用,請注明出處,感謝~
1.1 內(nèi)存簡介
- 物理上:內(nèi)存就是我們計算機中的內(nèi)存條,如下圖所示,一個內(nèi)存條就是一塊印制電路板,由多個存儲器芯片(DDR SDRAM)組成,其中,存儲器芯片就是下圖中的黑色塊塊,也可稱其為顆粒,內(nèi)存的特點是讀寫速度快,但斷電后所存儲的數(shù)據(jù)會丟失。

內(nèi)存條.png
- 內(nèi)存與硬盤區(qū)別:硬盤,特點是斷電后數(shù)據(jù)不丟失,容量大,但讀取速度慢。我們安裝的軟件,寫的文本文件都是保存在硬盤中的(否則斷電后,東西就都沒了),當(dāng)我們打開一個軟件或者打開一個文本文件后,操作系統(tǒng)會為這個軟件或文件分配內(nèi)存空間,再從硬盤中將其拷貝到內(nèi)存中,這樣我們的CPU就可以高速的操作軟件或者讀寫文件了(否則沒有內(nèi)存當(dāng)這個橋梁的話,軟件運行速度會很感人~)。例如:我們打開了一個word文檔,操作系統(tǒng)會為這個文檔分配內(nèi)存空間,將硬盤中的word文檔拷貝到內(nèi)存中一份,我們編輯word文檔其實是在編輯內(nèi)存中的副本,當(dāng)我們點擊保存按鈕時,會將內(nèi)存中的副本寫到硬盤中去,這樣當(dāng)我們關(guān)閉電腦再次打開時,修改后的文件依然有效。
- CPU:我快如閃電
- 內(nèi)存:我雖然沒有CPU塊,但是我可比硬盤快多了
- 硬盤:雖然我很慢,但是我容量大,又便宜

硬盤.png
- 程序中的內(nèi)存:在我們編寫C程序時,內(nèi)存的概念跟我們打開一個文件沒有什么差別。例如:當(dāng)我們定義一個變量時,C編譯器會請求操作系統(tǒng)為這個變量分配內(nèi)存空間,當(dāng)不需要這個變量時,C編譯器會請求操作系統(tǒng)釋放這個變量的內(nèi)存空間。
- 一句話:C程序員需要清楚的知道一個變量的生命周期,也就是一個變量什么時候有了內(nèi)存空間,什么時候被釋放了。**
1.2 內(nèi)存模型
- 為了清楚的知道程序中眾多變量的生命周期,我們需要對計算機中的內(nèi)存空間進行建模,稱為內(nèi)存模型。當(dāng)然了,模型不一定要非常的精確,只要有一個相對簡單的模型便于我們分析就可以了。
- 在本篇筆記中會基于以下內(nèi)存模型進行分析:
- 棧區(qū):局部變量的所保存的位置,特點:系統(tǒng)自動申請內(nèi)存空間,自動釋放內(nèi)存空間
- 堆區(qū):程序員通過使用malloc(), calloc(), realloc()等函數(shù)手動分配的內(nèi)存空間所保存的位置,特點:手動分配內(nèi)存空間,手動釋放內(nèi)存空間
- 全局區(qū):全局變量和全局字符串所保存的位置,特點:系統(tǒng)自動分配內(nèi)存空間,在整個程序運行期間不釋放這段內(nèi)存空間
- 代碼區(qū):程序中文本所保存的位置

內(nèi)存模型.png
- 內(nèi)存的計量單位:跟計算機中其它存儲設(shè)備一致,即:
1TB = 1024GB, 1GB = 1024MB,1MB = 1024KB,1KB = 1024Byte,1Byte = 8Bit
由于ASCII碼中一個字符使用1個字節(jié)表示,因此,程序中一般用到的內(nèi)存最小計量單位是字節(jié)(Byte)。 - 內(nèi)存模型的具體表現(xiàn)形式:以上四種內(nèi)存模型的具體表現(xiàn)形式都可理解為如下圖所示的“儲物格”,每個儲物格都有唯一的“標(biāo)簽”(內(nèi)存地址)與之對應(yīng),當(dāng)我們訪問一個”格子“的數(shù)據(jù)時,必須根據(jù)“標(biāo)簽”找到”格子“的空間,將數(shù)據(jù)”放入“(寫)或”拿出“(讀)。

內(nèi)存模型表現(xiàn)形式.png
- 一句話:在大腦中建立上圖內(nèi)存模型,在我們編寫程序時對號入座即可。**