在家是專門離線記錄的,現在在公司,就在這寫寫,自己能看懂就行。
1. 資源是有限的,不是無限的,因此資源是需要被分享的,這從根本上導致了程式bug,導致了程式的複雜性。
eg.:釣魚島之爭,因為釣魚島背後的能源,能源有限,卻由兩個不同利益團體需要。
eg.: 以arm920t為例,每一種模式能用的暫存器最多也就18個(r0-r15, cpsr, spsr),而這18個暫存器被所有函式公用,這麼少的資源,既然能組成這麼龐大的嵌入式世界,本身 就很神奇,所以寫彙編麻煩,不容易懂,高階語言厲害之一就在於不用程式設計師去管理那些麻煩的暫存器。 sp(r13)的共享導致棧溢位是個經常出現的問題。
eg.:慎用全域性變數的原因,因為該全域性變數被不同原始檔,不同函式共享等等,在有優先順序的多執行緒程式中,全域性變數所以最好加保護,就像領土國家要派士兵保衛一樣。
2. 在c中有很多是 成對(pair)的, 即其生命週期中執行了2次,另外成對的也必須執行兩次。
eg.:是執行,而不是出現,典型的是記憶體分配和釋放,簡化考慮在乙個函式中實現,在乙個函式中執行了成功兩次malloc, 在該函式執行完成前必須兩次執行free記憶體(非出現),因為有可能出現if等分支導致free出現多次,但真正只執行兩次。 當然free 後要 使指標為null避免野指標。
eg.: c和c++對於if等成對控制分支沒有verilog那麼嚴格,verilog中if 和 else 必須成對,且if中用到的變數在else中也必須賦值,如果不這樣很容易導致鎖存器,導致bug。
3. c/c++中乙個變數的兩個必要屬性, 值與位址。 位址本身是無法單獨存在的,其存在的價值是能夠找到其對應的變數的值, 所以c中函式有所謂的值傳遞,位址傳遞。 比如指標,如果指標未被正確賦值,就成了野指標(如執行free後未置null)。 怎麼解釋呢,感覺繞口, 指標本身是個變數,所以指標變數也有位址和值,只是其值存的是其它變數的位址,通過指標變數的值訪問到其它變數的位址,進而訪問到對應變數的值。
eg.: 這是今天主要想寫的,貼**說,因為也是弄了半天才真正明白。
#include typedef signed long acpi_native_int; //32 位,4位元組
#define _aupbnd (sizeof (acpi_native_int) - 1)
#define _adnbnd (sizeof (acpi_native_int) - 1)
#define _bnd(x, bnd) (((sizeof (x)) + (bnd)) & (~(bnd)))
#define va_arg(ap, t) (*(t *)(((ap) += (_bnd (t, _aupbnd))) - (_bnd (t,_adnbnd))))
#define va_end(ap) (ap = (va_list) null)
#define va_start(ap, a) (void) ((ap) = (((char *) &(a)) + (_bnd (a,_aupbnd))))
char *test(const char *fmt, ...)
int main(void)
如上**是在看linux的sscanf函式時用來驗證的,看注釋分析來分析去,也就是在變數的位址和值見繞。
4. 還有好些,是離線記的。
對C 翻轉課堂的感悟
賀老師在課堂上通過一些經典的源 幫助我們理解,有時候賀老師還會故意改一些地方,讓我們去糾正,這極大的提高了我們的編寫水平,賀老師上課時愛開玩笑,課堂氣氛總是很活躍,同學們的上課積極性都很高。賀老師把我們合理分組,小組成員之間互幫互助,共同學習。賀老師還教我們使用csdn部落格,這是it界比較權威的部...
關於重構的幾點感悟
如果問乙個程式設計師 為什麼會變爛?他可能會找出無數種理由 1 本來就爛,我只是加了一點東西 2 時間壓得太緊,根本沒有時間把 優化,功能實現出來就不錯了 3 系統已經上線了,不敢隨便去改以前的 不出問題還好,改出問題了誰負責 但是,這都是從外部找原因推卸責任,程式設計師應該從自身尋找原因。其實,變...
今天的幾點感悟 20160703
回家的路總是漫長而又曲折,從四川那邊回家近30個小時,從家裡會北京又是一整天的時間,整個9天假,路上花了一半的時間,這次的旅行算是匆忙,旅途距離跨度大,很大的一部分原因都是因為想帶著孩子,孩子還小,大人也累,孩子也累,不過總體來說還是其樂融融,現在的小孩子見多識廣,比我們高不知道多少倍,我到上大學了...