據說架構沒有乙個大家都統一認定的定義,於是我找了乙個能被絕大多數人接受的。這個定義很長,我沒心情把它都寫出來。但是有乙個地方引起了我的注意:「******xx執行時的聯絡*********xx。」這樣乙個高深的概念居然會跟這麼具體的乙個實現產生這麼密切的關聯,你難道不覺得驚奇嗎?
雖然我張嘴計算的世界,閉口計算的世界,但是歸根結底這些都離不開記憶體的世界,也就是程式執行時他們在記憶體中的狀態。
也許不是我們這代程式設計師,就不會有這個意識,就不能理解這樣理解問題的好處在什麼地方。我有那麼那麼多的例子可以證明,通過這個角度理解問題會讓你有一種豁然開朗的感覺。比如變數只被賦值一次,比如記憶體洩漏如何產生,比如為什麼大家都習慣用ebx裡傳遞引數,等等等等。但是我確實不是你,我不可能知道你面對乙個問題首先會從何處入手思考問題。
在我們這代人,習慣操作記憶體和暫存器,習慣呼叫中斷,習慣使用偏移訪問資料。我們確實不喜歡指標,不習慣api,不樂意用pop。但是如果這個是代價,我寧願你們像我們一樣這樣笨拙的寫程式,只要你們能建立起程式在記憶體中形態的概念。
其實問題本身並不需要多麼複雜的技術,我們僅僅需要知道資料是存放在資料區裡面的,程式命令是存放在**區的,堆疊是在堆疊區的。呼叫的api是在程式結尾的,調入記憶體的時候是會也呼叫這些尾巴上的資料的。而所謂的程式,實際上是程式跟作業系統的一些列的互動並且不斷的轉移控制權。而所謂的api呼叫,實際上就是作業系統把控制權拿過來交給api提供者,然後在拿回去交給程式這麼乙個過程。而我們的工作,其實就是學會如何分配好資料區和堆疊,從而是他們能夠得到最有效率的使用,而不會被種種莫名其妙的操作打成細小的碎片。
這一切本沒有多少複雜的成分,但是我卻不知道為什麼年輕人就那麼難建立起這樣的一種思維的模型,能夠時刻體會到程式在記憶體的形態。
其實各種資料,只要是資料,只要是變數,就會出現在資料區或者堆疊區。而常量不管你如何設定,只要在合理的範圍內,就不會存在於記憶體的資料區和堆疊區,而只會出現在命令區。當然你也確實可以講常量進行變數化,並且在資料區保留乙個備份,但是我實在看不出這樣作的好處。
從乙個正規表示式說開去
算起來接觸正則也為時不短,看過一點正規表示式的引擎原理,素來以正則高手自詡。昨日偶然間看到乙個正規表示式的入門教程,發現裡面居然有不少東西沒見過,還有幾個正則讓我困惑不已,說起來真是慚愧。以後在博大精深的正則面前,我只會說 我剛入門。好了,說正事。有如下的需求,有一串正整數,需要以英文格式展示,即右...
從乙個UI互動設計師的講座說開去
我不了解微軟,但是我還比較了解我畢業以來工作過的幾家公司。多數公司裡,多數互動設計師需要同時兼負美工的責任,所以在人員招聘的時候,主要會選擇美術相關專業的人員。這對於一般產品沒有問題,但是如果是設計一些專業產品,這些互動設計師可能就會覺得力不從心或是互動出來的產品僅僅是差強人意。最好的解決辦法倒也很...
從extern說開去(一)
extern符號的主要目的是為了實現c 對c程式的正確呼叫,在c 中完美相容c。包含的含義主要有兩個方面 1 extern關鍵字表明函式和全域性變數的作用範圍。從鏈結的角度看,意味著在編譯期間會以約定的方式表示引用的在其他模組中宣告的函式或變數,等到鏈結時再重定位,進行位址修正 絕對位址修正和相對位...