作者 謝恩銘,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)。
轉(zhuǎn)載請(qǐng)注明出處。
原文:http://www.lxweimin.com/p/e2954324e76d
內(nèi)容簡(jiǎn)介
- 前言
- 不同類型的存儲(chǔ)器
- 內(nèi)存
- 第一部分第五課預(yù)告
1. 前言
經(jīng)過(guò)上一課 C語(yǔ)言探索之旅 | 第一部分第三課:你的第一個(gè)程序 ,我們已經(jīng)知道怎么在屏幕上顯示文字了。
暫時(shí)我們也就只能做這么多了。而這是正常的,因?yàn)槲覀冞€沒學(xué)習(xí)很重要的編程知識(shí):變量。
變量相關(guān)的知識(shí)點(diǎn)比較多,我們會(huì)分為幾課來(lái)學(xué)習(xí):
- 內(nèi)存那檔事;
- 聲明變量;
- 顯示變量?jī)?nèi)容和提取輸入內(nèi)容。
這一課我們學(xué)習(xí)電腦內(nèi)存的知識(shí)。
每一個(gè)正常人都有記憶,我們的老朋友電腦也不例外,只不過(guò)它比我們“厲害”,它的記憶(存儲(chǔ)器)有好幾種。
為什么電腦要有好幾種存儲(chǔ)器呢?單單一種還不夠嗎?
不夠:主要問(wèn)題是我們想要電腦有一個(gè)既快捷(能夠很快提取信息)又容量大(能夠存儲(chǔ)很多數(shù)據(jù))的存儲(chǔ)器。
然而,你會(huì)啞然失笑,因?yàn)槟壳拔覀冞€沒有一種兼具快捷和大容量?jī)煞N特性的存儲(chǔ)器。更準(zhǔn)確地說(shuō),高速存儲(chǔ)器太貴,所以容量只能低一點(diǎn)。
因此,我們只能給電腦配備:
- 或者是很高速但是低容量的存儲(chǔ)器;
- 或者是大容量但是低速的存儲(chǔ)器。
2. 不同類型的存儲(chǔ)器
以下列出電腦的存儲(chǔ)器類型,從速度最快到速度最慢排序:
寄存器(Register):位于處理器(Processor)上,存取速度非常快(因?yàn)椤敖畼桥_(tái)先得月”)。
高速緩存(Cache):用于鏈接寄存器和內(nèi)存。
內(nèi)存(Memory):這是我們編程時(shí)最常打交道的存儲(chǔ)器,也是平時(shí)我們買電腦時(shí)很關(guān)心的數(shù)據(jù)之一。
硬盤(Hard Disk):你肯定不陌生,就是平時(shí) Windows 電腦里的 C 盤,D 盤之類的(當(dāng)然還有很多其他類型的硬盤,比如 U 盤,EEPROM,等),我們?cè)诶锩娲鎯?chǔ)文件,照片,視頻,等。
正如上面所說(shuō),我們這里把存儲(chǔ)器從最快(寄存器)到最慢(硬盤)做了分類。你應(yīng)該可以推斷出寄存器相比硬盤來(lái)說(shuō),容量要小很多。
寄存器只能存儲(chǔ)少量的數(shù)據(jù),而硬盤則可以存儲(chǔ)大量的數(shù)據(jù)。
當(dāng)我們說(shuō)一個(gè)存儲(chǔ)器慢的時(shí)候,其實(shí)是相對(duì)電腦的處理速度而言的。
讀取硬盤大概要耗費(fèi) 8 毫秒,對(duì)于一臺(tái)電腦來(lái)說(shuō)那已經(jīng)很慢了(現(xiàn)在普通的家用電腦的運(yùn)算速度都已經(jīng)可以達(dá)到每秒幾十億次了,1 GHz 對(duì)應(yīng)每秒 10 億次;如果你的電腦主頻是 2.5 GHz,那運(yùn)算速度就是每秒 25 億次;現(xiàn)在家用的雙核電腦通常都能達(dá)到每秒 50 億次運(yùn)算(5 GHz)左右的水平)。
上面所說(shuō)的內(nèi)容,我們需要掌握什么呢?
事實(shí)上,只需要關(guān)心一部分就夠了。要知道在編程時(shí),我們基本上只和內(nèi)存打交道。我們?cè)谥蟮恼n程中也會(huì)學(xué)習(xí)如何讀寫硬盤,在硬盤上創(chuàng)建文件。至于寄存器和高速緩存,我們基本不關(guān)心,這是電腦的事。
當(dāng)然,在一些很底層的語(yǔ)言中,比如匯編語(yǔ)言(Assembly,簡(jiǎn)稱 ASM),我們經(jīng)常會(huì)用到寄存器。
我以前學(xué)生時(shí)代跟著王爽老師的《匯編語(yǔ)言》第二版學(xué)習(xí)了匯編,那本書寫得挺好。
但是我想說(shuō)的是,用匯編哪怕只是做個(gè)乘法,也是很不容易的。幸運(yùn)的是,在 C語(yǔ)言(或其他大部分語(yǔ)言)中做乘法很簡(jiǎn)單。
還要記住一個(gè)很重要的知識(shí)點(diǎn):上述四種存儲(chǔ)器類型中,只有硬盤是可以永久保存數(shù)據(jù)的。其他的存儲(chǔ)器(寄存器,高速緩存,內(nèi)存)都是暫時(shí)性的存儲(chǔ)器:當(dāng)你關(guān)閉電腦時(shí),這些存儲(chǔ)器會(huì)被清空。
幸好,當(dāng)你重新開啟電腦時(shí),硬盤里的數(shù)據(jù)始終存在,所以你的電腦還知道自己姓甚名誰(shuí)。
3. 內(nèi)存
既然我們以后的大部分時(shí)間都要跟內(nèi)存打交道,那豈能不來(lái)認(rèn)識(shí)認(rèn)識(shí)這位朋友呢?
我們用變焦鏡頭的形式慢慢道來(lái)。
一開始看到的是我們的電腦工作環(huán)境的整體圖片:
上圖中的鼠標(biāo),鍵盤,顯示屏,你應(yīng)該都不陌生吧,還有右邊那個(gè)大家伙:主機(jī)箱。
我們關(guān)心的是主機(jī)箱,因?yàn)槲覀兊膬?nèi)存在這里面。
當(dāng)然,我們的硬盤,寄存器和高度緩存也都在這個(gè)主機(jī)箱里。
我們來(lái)開蓋看看里面的內(nèi)容吧:
看上去有點(diǎn)凌亂,不過(guò)不用擔(dān)心,我們并不需要知道各部分的功能,我們只需要關(guān)心我們這一章的主角:內(nèi)存。
它在哪呢?聰明如你可能已經(jīng)發(fā)現(xiàn)了,我用紅色框標(biāo)識(shí)的那個(gè)區(qū)域就是內(nèi)存所在。
我并沒有標(biāo)出其他兩種存儲(chǔ)器:高速緩存和寄存器,因?yàn)樗鼈儗?shí)在太小了,不容易看到。
下圖就是內(nèi)存條的樣子:
內(nèi)存也經(jīng)常被稱為 RAM,是 Random Access Memory(隨機(jī)存取存儲(chǔ)器)的縮寫。所以之后的課程我們有時(shí)也會(huì)用 RAM 來(lái)稱呼內(nèi)存。
內(nèi)存圖示
從外觀上,即使我們用顯微鏡來(lái)看內(nèi)存條,也看不出個(gè)所以然來(lái)。我們關(guān)心的是它內(nèi)部的運(yùn)作機(jī)制。
下面是一張內(nèi)存機(jī)制的圖示:
很精簡(jiǎn)是吧,因?yàn)槲覀儾恍枰捞嗉?xì)節(jié)。不然我們可能會(huì)被告知:“你,你知道得太多了”。然后… 就沒有然后了...
如果你能了解清楚上圖,暫時(shí)也已經(jīng)足夠了。
如你所見,上圖中我們關(guān)心兩列:
左邊一列是地址: 內(nèi)存地址是一個(gè)數(shù),能夠讓電腦在內(nèi)存里定位, 地址從 0 開始,到 3448765900126 結(jié)束。這里只是舉個(gè)例子,我并不知道這個(gè)內(nèi)存里有多少地址(不一定是到 3448765900126 結(jié)束),每個(gè)內(nèi)存條的容量是不同的。一般來(lái)說(shuō),內(nèi)存條容量越大,地址數(shù)就越多,儲(chǔ)存的信息也越多。
右邊一列是值(數(shù)字): 每一個(gè)內(nèi)存地址都儲(chǔ)存一個(gè)數(shù)值,以便電腦之后使用,而且每個(gè)地址只能存儲(chǔ)一個(gè)值。
我們的內(nèi)存只能存儲(chǔ)數(shù)字。
那你要問(wèn)了,內(nèi)存里怎么存儲(chǔ)一個(gè)英語(yǔ)單詞呢?
好問(wèn)題。事實(shí)上,對(duì)于電腦來(lái)說(shuō),字母也是以數(shù)字的形式呈現(xiàn)。一句話就是一連串的數(shù)字。
有一張表儲(chǔ)存了數(shù)字和字母的對(duì)應(yīng)關(guān)系,這張表被稱為“ASCII 碼表”。舉個(gè)例子,數(shù)字 67 對(duì)應(yīng)大寫的字母 C。
我們暫時(shí)不深究 ASCII 碼表,之后的課程會(huì)再次提到。
所以上圖其實(shí)不難理解,如果我們要在內(nèi)存中儲(chǔ)存一個(gè)數(shù),比如 5,內(nèi)存會(huì)看看哪個(gè)地址是可用的,然后在里面(比如地址 35487412)儲(chǔ)存 5;之后內(nèi)存再要取這個(gè)數(shù)值的時(shí)候,就直接去訪問(wèn) 35487412 這個(gè)地址,得到里面的數(shù),是 5。
大體上內(nèi)存的機(jī)制就是這樣,暫時(shí)還是有點(diǎn)模糊的,但在之后的章節(jié),會(huì)越來(lái)越清晰,我向你保證。
4. 第一部分第五課預(yù)告
今天的課就到這里,一起加油吧!
下一課:C語(yǔ)言探索之旅 | 第一部分第五課:變量的世界(二),變量聲明
下一課我們繼續(xù)探尋 C語(yǔ)言變量的奇幻世界。
我是 謝恩銘,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)運(yùn)營(yíng)者,慕課網(wǎng)精英講師 Oscar 老師,終生學(xué)習(xí)者。
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:「向著標(biāo)桿直跑」