聊聊C語言-存儲世界的奧秘
我們開始講講與數(shù)據(jù)類型有這著千絲萬縷聯(lián)系的變量。所有語言的變量都是存儲在計算機存儲系統(tǒng)中,C語言的變量當然也不例外。所以我們先從計算機的存儲系統(tǒng)講起,來揭秘這個存儲世界的奧秘。1.什么是計算機的存儲系
我們開始講講與數(shù)據(jù)類型有這著千絲萬縷聯(lián)系的變量。
所有語言的變量都是存儲在計算機存儲系統(tǒng)中,C語言的變量當然也不例外。所以我們先從計算機的存儲系統(tǒng)講起,來揭秘這個存儲世界的奧秘。
1.什么是計算機的存儲系統(tǒng)?
計算機存儲系統(tǒng)就好比是人類的大腦,大腦記憶了人們生活中的信息,計算機存儲系統(tǒng)則存儲了計算機程序的全部信息。當我們在計算機中輸入數(shù)據(jù)時計算機程序就會操作存儲系統(tǒng)將這些信息以各種形式進行存儲處理。只不過有些信息關(guān)機以后仍然存在,有些則隨之消失,有些信息處理的很慢,有些則處理的很快。
2.計算機存儲系統(tǒng)有哪些部分組成?
既然稱之為系統(tǒng)那么它就是一個比較復雜的機制,計算機的存儲系統(tǒng)是分層次進行存儲的,就像人類的社會分三六九等一樣,所以小編有時在閑時也感慨人類的等級制度是多么的根深蒂固竟然影響著我們生活的方方面面。它的存儲層次就像人類的等級金字塔。
上圖就是存儲系統(tǒng)的金字塔。它分為兩個部分:
臨時存儲區(qū)域:由寄存器、緩存(cache)、內(nèi)存組成,存儲在這部分的信息關(guān)機就會消失,就像我們這些平民百姓百年以后就會當然無存一樣。
永久性存儲區(qū)域:由ROM、可移動存儲器(移動硬盤)、網(wǎng)絡存儲(云存儲)、硬盤存儲器(硬盤),存儲在這些地方的數(shù)據(jù)則會保留相當長的時間。也就是那些可以流芳百世或者遺臭萬年的人可以享受的待遇。哈哈。。
3.為什么這么來劃分層次?
想想也會明白,一個國家的領導只能有一個,而接觸它的人也就寥寥無幾,而等級越低的人則人數(shù)越多可以接觸到的人也就越多。計算機存儲系統(tǒng)也一樣。CPU作為計算機的核心由于它處理速度很快,所以來設計存儲系統(tǒng)時就采用了分層的方法。
1)、CPU——Cache 存儲層次:由于主存儲器的讀寫速度低于CPU的速度,而CPU每執(zhí)行一條指令都要訪問內(nèi)存儲器,所以CPU總是處于等待狀態(tài),嚴重降低了系統(tǒng)的效率。引入Cache后,在Cache內(nèi)保存著主存儲器內(nèi)容的部分副本,CPU在讀寫數(shù)據(jù)時首先訪問Cache。由于Cache的速度與CPU相同,因此CPU就能在零等待狀態(tài)下迅速地完成數(shù)據(jù)的讀寫。
2)、Cache——內(nèi)存儲器存儲層次:當Cache中不含有CPU所需的數(shù)據(jù)時,CPU才去訪問內(nèi)存儲器。此時用一個存儲器讀取周期的時間從內(nèi)存中讀出這個數(shù)據(jù)后送到CPU,并且,把含有這個數(shù)據(jù)的整個數(shù)據(jù)塊從內(nèi)存送到Cache中。
3)、內(nèi)存儲器——外存儲器存儲層次:當一個程序需要執(zhí)行時,計算機必須將其程序通過一定的調(diào)度算法從外存調(diào)入內(nèi)存。Cache- >內(nèi)存儲器- >外存儲器:其容量越來越大,但讀寫速度越來越低。
4.什么是寄存器?
簡單說它就是CPU的小秘,CPU直接訪問的就是它。它也叫觸發(fā)器,它往往和CPU同時鐘頻率,所以速度非???。
5.什么是緩存(cache)?
CPU的二級直屬單位,由小秘直接訪問。目前我們CPU中一般集成了2到3級的Cache,容量從128K到4M。對于CPU總的Cache來說,它們的也是和CPU同頻率的,所以理論上執(zhí)行速度和寄存器應該是相同的,但是Cache往往用來存儲一些指令和數(shù)據(jù),這樣就存在一個命中的問題。當沒有命中的時候,需要向下一集的存儲器獲取新的數(shù)據(jù),這時Cache會被lock,所以導致實際的執(zhí)行速度要比寄存器慢。
6.什么是內(nèi)存?
它就出了CPU的紫禁城了,作為CPU的外親為CPU服務。我們目前聽的內(nèi)存一般叫DDR SDRAM,還有早期的SDRAM。而DDR表示雙倍的速率,而現(xiàn)在又有了DDR2,DDR3,DDR4,他們的帶寬也是越來越大。
7.什么是硬盤?
它是CPU的遠房親戚。目前硬盤主流已經(jīng)是500G,1T。轉(zhuǎn)速也在7200轉(zhuǎn)左右。相對于8G的內(nèi)存,一個500G的硬盤可以說是相當?shù)谋阋?。但是問題在于他的速度非常的慢,從磁盤讀取數(shù)據(jù)需要幾個毫秒,而CPU時鐘周期是以納秒計算。磁盤存儲是一種機械結(jié)構(gòu)。數(shù)據(jù)都通過電磁流來改變極性的方式被電磁流寫到磁盤上,而通過相反的方式讀回。一個硬盤由多個盤片組成,每個盤片被劃分為磁道,扇區(qū)和最小的單位簇。而每個盤面都有一個磁頭用來讀取和寫入數(shù)據(jù)。而硬盤的馬達裝置則控制了磁頭的運動。