作為一門古老的程式語言,C語言已經堅挺了好幾十年了,初學者從C語言入門,大學將C語言視為基礎課程。不管別人如何抨擊,如何唱衰,C語言就是屹立不倒;Java、C#、Python、PHP、Perl 等都有替代方案,它們都可以倒下,唯獨C語言不行。
程序是在內存中運行的(我們將在《載入內存,讓程序運行起來》一節中詳細說明),一名合格的程式設計師必須了解內存,學習C語言是了解內存布局的最簡單、最直接、最有效的途徑,C語言簡直是為內存而生的,它比任何一門程式語言都貼近內存。
所謂內存,就是我們常說的內存條,就是下圖這個玩意,相信你肯定見過。
所有的程序都在拼盡全力節省內存,都在不遺餘力提高內存使用效率,計算機的整個發展過程都在圍繞內存打轉,不斷地優化內存布局,以保證可以同時運行多個程序。
不了解內存,就學不會進程和線程,就沒有資格玩中大型項目,沒有資格開發底層組件,沒有資格架構一個系統,命中注定你就是一個菜鳥,成不了什麼氣候。
工作期間我曾專注於網站開發,雖然能夠設計出界面漂亮、體驗良好的網頁,但是對內存洩漏、多線程、共享內存等底層概念一竅不通,感覺和周圍同事的差距很大,這讓我非常鬱悶,不知道如何突破。我曾多次嘗試學習內存和線程,也找了很多資料,但是無論如何都啃不懂,到頭來還是一頭霧水。
離職後我全職運營C語言中文網,於是決定再次系統、深入、全面地學習C語言,並結合C語言去了解一些內存知識,這個時候我才發現,原來C語言就是為內存而生的,C語言的設計和內存的布局是嚴密貼合的,我因為學習C語言而吃透了內存,了解了計算機內存是如何分布和組織的。
C語言無時無刻不在談內存,內存簡直就是如影隨形,你不得不去研究它。
至關重要的一點是,我能夠把內存和具體的編程知識以及程序的運行過程結合起來,真正做到了學以致用,讓概念落地,而不是空談,這才是最難得的。
攻克內存後基本上也能夠理解進程和線程了,進程和線程是圍繞內存打轉的,從一定程度上講,它們的存在也是為了更加高效地利用內存。
從C語言到內存,從內存到進程和線程,環環相扣:不學C語言就吃不透內存,不學內存就吃不透進程和線程。
我感覺自己瞬間升華了,達到了一個新的高度,之前的很多謎團都解開了,和大神交流也沒有障礙了。
「內存 + 進程 + 線程」這幾個最基本的計算機概念是菜鳥和大神的分水嶺,也只有學習C語言才能透徹地理解它們。Java、C#、PHP、Python、JavaScript 程式設計師工作幾年後會遇到瓶頸,有很多人會回來學習C語言,重拾底層概念,讓自己再次突破。