【C語言】?jī)?nèi)存模型
????太極生兩儀,兩儀生四象,四象生八卦,八卦衍萬物。
????計(jì)算機(jī)世界中的一切都是由內(nèi)存表示,所有的編程歸根到底不過是對(duì)內(nèi)存的讀寫,了解了內(nèi)存模型,C語言也就手到擒來了。
????所謂內(nèi)存,并不復(fù)雜,就是一個(gè)很大很大的空間而已,可以存放計(jì)算機(jī)世界的任何東西。
存錢與取錢的故事
????假如銀行里一個(gè)保險(xiǎn)柜只能放256塊錢(不要問為什么只能放這么少,因?yàn)榉诺氖墙鸫u),那么兩個(gè)保險(xiǎn)柜就能放512塊錢,四個(gè)保險(xiǎn)柜就能放1024塊錢......
????此外,銀行里有很多個(gè)保險(xiǎn)柜(大概42億個(gè)),為了管理,銀行肯定需要給每個(gè)保險(xiǎn)柜編號(hào)的,并且管理員有個(gè)特殊的愛好——編號(hào)從0開始,那么保險(xiǎn)柜的編號(hào)就是0,1,2,3,4,......,42億-1。
????好了,現(xiàn)在該到你存錢和取錢的時(shí)候了。
? ?你不能直接將錢放到銀行的保險(xiǎn)柜里,你只能把錢交給銀行的工作人員,然后由工作人員把錢放到保險(xiǎn)柜里;你也不能直接將錢從保險(xiǎn)柜里取出來,而是由銀行的工作人員取出來,然后再把錢交給你。
?存錢與取錢與內(nèi)存的故事
????保險(xiǎn)柜就是計(jì)算機(jī)的內(nèi)存,銀行的管理員/工作人員就是計(jì)算機(jī),你就是你,你與銀行工作人員交流用的是漢語,而與計(jì)算機(jī)交流用的是C語言(或其他編程語言)。
????一個(gè)保險(xiǎn)柜最多能裝256塊錢,一個(gè)字節(jié)最大能表示256個(gè)數(shù);兩個(gè)保險(xiǎn)柜最多能裝512塊錢,兩個(gè)字節(jié)最大能表示65536個(gè)數(shù);四個(gè)保險(xiǎn)柜最多能裝1024塊錢,四個(gè)字節(jié)最大能表示4,294,967,296個(gè)數(shù)。
????為什么它們的增量不同呢?因?yàn)榍罢弑硎镜氖茄b得下多少個(gè),后者表示的是能表示多少個(gè),你把前者換成能裝下多少種水果,它們的增量就差不多了。
????還有一個(gè)點(diǎn),那就是編號(hào),內(nèi)存的編號(hào)稱為地址。內(nèi)存和保險(xiǎn)柜完全一樣,從0開始編號(hào),一直到最大內(nèi)存減1,每個(gè)字節(jié)占用一個(gè)編號(hào)。也就是說字節(jié)是最小的可尋址單位(尋址就是尋找內(nèi)存單元,要讀寫內(nèi)存單位就需要給出內(nèi)存單元的地址)。
計(jì)算機(jī)世界的事物
????計(jì)算機(jī)世界的任何事物都是由內(nèi)存表示的,區(qū)別僅是根據(jù)事物的大小占用不同大小的內(nèi)存而已。
????比如,陰與陽,最小只需要用一個(gè)比特(bit)就可以表示。一個(gè)比特通常等于1/8字節(jié),比特是最小的數(shù)據(jù)單位,相當(dāng)于現(xiàn)實(shí)世界中的最小粒子,計(jì)算機(jī)世界的所有事物都是由一個(gè)個(gè)比特構(gòu)成的。
????又如,一棵樹,樹有很多屬性(特征),那些不重要的屬性就可以不管了,就像物理學(xué)中抽象出的質(zhì)點(diǎn)一樣。如果你關(guān)心樹的名稱,高度和重量,那么名稱就可以用100個(gè)字節(jié)表示,每?jī)蓚€(gè)字節(jié)表示一個(gè)漢字,最多可以表示50個(gè)漢字,這足夠了。高度和重量都是實(shí)數(shù),那么用4個(gè)字節(jié)來表示,計(jì)算機(jī)中的實(shí)數(shù)也是有范圍了。至此,需要108個(gè)字節(jié)來表示這棵樹。
計(jì)算機(jī)世界到現(xiàn)實(shí)世界
????計(jì)算機(jī)世界的事物最終是要反饋給人的,要么以圖像的形式讓人能看到,要么以聲音的形式讓人能聽到,那么這是怎么轉(zhuǎn)換的呢?
????事物最終存儲(chǔ)在內(nèi)存中,內(nèi)存中的數(shù)據(jù)最終都是以二進(jìn)制的形式存儲(chǔ)的(一個(gè)個(gè)的比特的形式),既然都是一樣的,為什么有些被認(rèn)為是圖片,有些被認(rèn)為是音頻呢?這個(gè)問題的答案很簡(jiǎn)單,事物是人定義的,只要根據(jù)同樣的定義把數(shù)據(jù)讀取出來就能得出想要的事物了。
????比如,一個(gè)圖像,當(dāng)你把它保存為jpg格式的文件的時(shí)候,那個(gè)文件中必然有一段數(shù)據(jù)能唯一地標(biāo)識(shí)出這個(gè)文件的類型。
????有趣的是,同樣的一段數(shù)據(jù),你把它理解為什么事物都是可以的。比如,上面所說的那個(gè)圖片文件,你同樣可以用記事本來打開它,記事本中出現(xiàn)的文本就是它的數(shù)據(jù)的文本的形式,不過大概率是外星文(亂碼)。
?總結(jié)
????在計(jì)算機(jī)世界中,所有事物最終都是以同樣的形式表示的,理解了這點(diǎn),你就可以隨心所欲的發(fā)揮,創(chuàng)造出任何你想要?jiǎng)?chuàng)造的,成為那個(gè)世界的神!