1.內(nèi)存地址用4位16進(jìn)制和8位16進(jìn)制表示的區(qū)別绑洛。例如經(jīng)吵ü保可以看到某些書籍上寫的內(nèi)存地址0x0001仍源,在另外一些書籍上寫的內(nèi)存地址又變成了0x00000001心褐。都是表示的編號為1的內(nèi)存地址,為什么一個是4位16進(jìn)制表示笼踩,另外一個又是用8位16進(jìn)制表示呢逗爹?
首先,必須要知道內(nèi)存地址只是一個編號嚎于,代表一個內(nèi)存空間掘而。那么這個空間是多大呢挟冠?原來在計算機(jī)中存儲器的容量是以字節(jié)為基本單位的。也就是說一個內(nèi)存地址代表一個字節(jié)(8bit)的存儲空間袍睡。
例如經(jīng)常說32位的操作系統(tǒng)最多支持4GB的內(nèi)存空間知染,也就是說CPU只能尋址2的32次方(4GB),注意這里的4GB是以Byte為單位的斑胜,不是bit控淡。也就是說有4G=4*1024M(Byte)=4*1024*1024Kb(Byte)=4*1024*1024*1024bit(Byte),即2的32次方個8bit單位止潘。
所以說用4位16進(jìn)制表示的內(nèi)存地址和用8位16進(jìn)制表示的內(nèi)存地址掺炭,其實都是代表一個8bit的存儲空間而已:
至于說為什么會出現(xiàn)一種是用4位十六進(jìn)制表示內(nèi)存地址,另一種用8位十六進(jìn)制表示內(nèi)存地址覆山,那是根據(jù)不同的硬件環(huán)境來的竹伸。個人理解:有些CPU只能尋址16位(16根地址線),所以用4位十六進(jìn)制表示地址就夠用了簇宽。有些CPU只能尋址32位(32根地址線)勋篓,所以用8位十六進(jìn)制。
另外記住魏割, 210?= 1024
???????????? 1G? = 1024 M
???????????? 1M? =? 1024 Kb
???????????? 1Kb = 1024 bit
2.理解內(nèi)存譬嚣。
程序和數(shù)據(jù)平常存儲在硬盤等存儲器上,不管你開機(jī)或關(guān)機(jī)了钞它,它們都是存在的拜银,不會丟失。硬盤可以存儲的東西很多遭垛,但其傳輸數(shù)據(jù)的速度較慢尼桶。所以需要運行程序或打開數(shù)據(jù)時,這些數(shù)據(jù)必須從硬盤等存儲器上先傳到另一種容量小但速度快得多的存儲器锯仪,之后才送入CPU進(jìn)行執(zhí)行處理泵督。這中間的存儲器就是內(nèi)存。
無論何種存儲器庶喜,軟盤小腊、硬盤、光盤或者內(nèi)存久窟,都有地址秩冈。因為它們要存儲數(shù)據(jù),所以就必須按一定的單位的數(shù)據(jù)分配一個地址斥扛。有了地址入问,程序才能找到這些數(shù)據(jù)。這很好理解,想想你們家為什么要有門牌號即可芬失。
學(xué)習(xí)編程卷仑,必須對內(nèi)存的地址有一個透徹的理解。我們編程中的每一行代碼麸折,代碼中用到的每個數(shù)據(jù),都需要在內(nèi)存上有其映射地址粘昨。當(dāng)然垢啼,我們并不需要掌握內(nèi)存是如何進(jìn)行編址,那是計算機(jī)系中的另外一門課:操作系統(tǒng)的事了张肾。
內(nèi)存地址:
計算機(jī)把所有的信息都給數(shù)字化了芭析,所以它知道自已把一個數(shù)據(jù),一條命令記到了內(nèi)存中的哪個(些)位置吞瞪。
看下面的例子:
如果讓計算機(jī)在內(nèi)存里記住“丁小明”這個名字馁启,可以示意為:
在第一行中,每一格表示一段內(nèi)存芍秆,而格子里的內(nèi)容是這段內(nèi)容記下的數(shù)據(jù)惯疙;第二行中每一格內(nèi)數(shù)字就是對應(yīng)的內(nèi)存的地址。
可能有人會啄磨:為什么一個“丁”字(“小”“明”兩字也一樣)占用兩個內(nèi)存地址呢妖啥?這是因為漢字在一個地址(位置)里呆不下霉颠,必須放在連續(xù)的兩個地址空間內(nèi)。那么荆虱,什么東西可以放在單獨的一個內(nèi)存地址里呢蒿偎?像英文的里字母,比如’A’, 像阿拉伯?dāng)?shù)字:比如’1’,可以怀读,而且就是放在一個內(nèi)存地址里诉位。假設(shè)有一字符串“ABC”,被記在內(nèi)存里菜枷,可示意為(這次我們假設(shè)從內(nèi)存地址2000H處記起):
現(xiàn)在我們提幾個問題:
計算機(jī)記住”丁”字的內(nèi)存地址是多少苍糠? 答案是:1000H。請見上圖
我們一直在說犁跪,在計算機(jī)中椿息,所有信息都被數(shù)字化為2進(jìn)制的0、1坷衍,所以寝优,“丁小明”這個名字被也應(yīng)該是一串:0001 0010 0111 0101……,可是在中圖所畫出的,計算機(jī)內(nèi)存里記的枫耳,仍是“丁小明”三個字啊乏矾。
下面是解釋,我們只舉一個字”丁”講解。我們假設(shè)在那一串里的 0001 0010 0111 0101 對應(yīng)的是 “丁” 字钻心,那么有:
讓我們把字母’A’對應(yīng)的圖也畫出來:
在上面的兩個圖中:
第一行分別是“丁”和“A”凄硼,它是給人看的。
第二行則是一串的的0和1捷沸,這才是計算機(jī)內(nèi)存中實際存儲的數(shù)據(jù)摊沉。
第三行是內(nèi)存的地址。并不是每個0和1所占的位置都被編上地址痒给。而是每8個才擁有一個地址说墨。
關(guān)于第三行,你可以這樣理解苍柏,門牌號是一個家庭分配一個尼斧,每家每戶內(nèi)還有客廳臥室,這些就沒有地址了试吁。
可見:
‘丁’的確是由一串0棺棵、1組成的。更確切地熄捍,從圖上可以看出‘丁’是由16位0和1組成烛恤。這16數(shù)都存放在2個內(nèi)存地址里。
‘A’也一樣余耽,它是由8位0棒动、1組成的。占1個內(nèi)存地址宾添。
總結(jié):內(nèi)存地址是內(nèi)存當(dāng)中存儲數(shù)據(jù)的一個標(biāo)識船惨,并不是數(shù)據(jù)本身,通過內(nèi)存地址可以找到內(nèi)存當(dāng)中存儲的數(shù)據(jù)缕陕。