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