#嗯,,,今年是2023年,如果從目前的各種開發項目中開說,C語言的確是用的很少,除了嵌入式等一些一定領域,基本很少能見到C的蹤影了,但是為什麼還是一直能聽到xx說要學好C語言呢?
#按照我的理解,其實學習C語言,學的並不是這個語言,而是這個語言背後所代表的一些東西,代表的一些設計,代表的一些本質。
相信不少萌新在群組裡可能聽到某個大佬說,我一星期學完了xx語言,然後直接上手幹活,然後你默默的說了一句,裝13,也可能,你們就在群裡直接槓起來了。
那麼,真的可以說,一周,或是兩週時間,學會一門語言嗎?。
我可以負責任的,告訴你,絕對沒問題,但需要建立在強大的基礎上。
而指針,是特別重要的基礎,現在不管哪個語言,其實本質都是指針的應用,只不過是封裝的簡單了而已。
但是這造成的就是根基如果不穩,就會造成一些莫名奇妙並且不懂的問題,尤其是對萌新來說。
所以,不管現在不管在任何階段,沒有學習C語言的一定要學C,撿起曾經丟下的重要的基礎。
那麼,就先聽我簡單的入門吧。
本次使用的技術堆疊是Go語言,理論來說是用C語言的,但是因為在指針這一塊入門時,Go和C的本質基本上一樣,所以就採用更人性化的Go語言。
後期會在加上Python,和Go對比一下,區別在哪,看看燒了一把火的Python是如何分配記憶體的。
目前,在看這篇文章時,我還是建議小夥伴有一定基礎的,至少能看懂怎麼定義變數啥的都行。
首先,我們需要了解一下計算機主要組成部分。
首先,簡單的說,至少由CPU
記憶體列
硬碟
#顯示器
#作業系統(Linux,Windowns)
等。
那麼這些硬體是如何互相配合的呢。
嗯...大概是這樣子的,有點醜。
簡而言之就是:
系統上的每個應用程式(qq,微信,等)想要讓電腦播放音樂了,顯示器顯示個東西了,像硬碟寫入個檔案了,都需要經過作業系統的同意。
作業系統呼叫CPU完成指令的執行,CPU將開啟的應用程式讀取到記憶體條中,所以,為什麼原來在機械硬碟會那麼卡,機械太慢了,現在的固態咻咻咻的就完成了硬碟資料到記憶體資料的轉移。
CPU分析讀取到記憶體條中的應用數據,如果是CPU處理的數據,自己拿走計算,如果是顯示卡處理的數據,調用給顯示卡計算,如果是聲音數據,給聲卡計算,等。
透過以上協調,整個應用程式基本上就能跑起來了,如果需要將資料寫入硬碟,CPU在將記憶體條中的寫入硬碟就行了。
好嘞,透過上述,我們基本上可以了解到作業系統和各硬體的協調關係。
悄悄的說個秘密咯,我們寫的程式碼,基本上都是運行在記憶體中的呢,同理,上述所說的應用,基本上也是將應用的程式碼跑在記憶體中的。
沒錯,就是這玩意,記憶體條。
同理,我還可以這樣理解記憶體條內部的結構。
我們可以將記憶體條理解成一個個房子,就像這樣。
還是很醜...
但是我們的記憶體條是有的座標的,也叫#,每個小格子放著一個個的值。
但是通常情況下,我們都是平面圖理解的,就像這樣。
位址(座標)一般以十六進位表示,值該是啥就是傻。
#我們來看一段非常短Go的程式碼。
宣告一個age變數且賦值為18,且輸出。
package main import "fmt" func main() { var age int = 18 fmt.Println("我今年:",age,"岁") }
在記憶體中如何表示。
我們的變數名稱age指向了##0x1001位址,並且輸出了0x0001
儲存的值。
就像這樣。
#:#一定要理解這句話,變數名稱指向的就是記憶體列上的地址。
#
上述age指向就是位址0x1001
#。
但我們在fmt.Println("我今年:",age,"歲")
列印時,我們印出的是位址裡面的值##。
同理,我們在賦值,交換變數時,還是#是位址裡面的值。
例如:
上述程式碼記憶體分配圖。 #######
age2會重新申請一個位址儲存age的值18。
可能有時候可能會有人問,星期八,有沒有這種情況,他倆同時指向一個內存,這種不是更省內存嘛。
結果:當然會,這種情況,我們後面會講到的,現在能看懂就行,一步一步來。
結論
變數名稱指向的是記憶體位址。
我們在賦值時,或列印等操作變數時,操作的是位址上面的值。
上述已經很長了可能你們有點暈了,這篇就到此為止了。
如果在操作過程中有任務問題,記得下面留言,我們看到會第一時間解決問題。
我是碼農星期八,如果覺得還不錯,記得動手按讚以下哈。
感謝你的觀看。
如果在操作過程中有任何問題,記得下面留言,我們看到會第一時間解決問題。
用微笑告訴別人,今天的我比昨天強,今後也一樣。
如果你覺得文章還可以,記得按讚留言支持我們哈。感謝你的閱讀,有問題請記得在下方留言噢~
想學習更多關於Python的知識,可以參考學習網址:http://pdcfighting.com/,點擊讀原文,可以直達噢~
#########################-------- --------##-----# --- # End ------ ------------
#-----
#歡迎大家點贊,
留言,轉發,轉載,感謝大家的相伴與支持
# #想加入Go學習群組請在後台回覆【入群組】
以上是從Go語言角度淺談記憶體分配的詳細內容。更多資訊請關注PHP中文網其他相關文章!