CS:APP 學習筆記

CS:APP 全名為 Computer Systems: A Programmer’s Perspective,是 CMU 計算機概論課程的教材。
根據 jserv 老師的說法,這們課等同台灣研究所課程的難度,希望大家認真讀這本教材後,能夠有國外頂尖大學大二學生的程度。隨著電腦科技發展日新月異,最基礎的學科仍舊是所有新技術的根基,與其不斷追求新技術,不如好好打穩根基,因此決定研讀這本教科書,搭配 CMU 的課程講義與影片,還有 jserv 老師的補充資料一同學習,期許自己能夠對資訊科技有扎實的基礎。

共筆連結

我將筆記寫於 hackmd ,方便所有朋友發現任何錯誤都可以直接修正,我也同步把筆記發表於 CS:APP Taiwan study group ,歡迎一起來讀書討論!

CH2 Presentation and Maipulating Information

(推薦必讀,對於程式碼會有更深刻的認知!)
共筆連結

CH3 Machine-level Representation of Programs

共筆連結

CH7 Linking

共筆連結

參考資料

  1. CS:APP 學習指引緒論
  2. CMU 15-213

時間複雜度 – 陪你刷題

為什麼要學 Big O

學習演算法和資料結構就是為了寫出高效率的程式碼,不只在時間上需要快速,在空間上的消耗更要節省,而 Big O 就是用來衡量演算法效率的單位。因此,在學習各種資料結構與演算法帶來的好處之前,要先懂得如何透過 Big O 辨別程式碼的效率。

閱讀全文〈時間複雜度 – 陪你刷題〉

淺談 C 語言的型態轉換

前言

最近公司專案導入 static code check tool 並且採用較嚴格的 coding rule 來檢查,團隊內不乏許多資深的工程師,但檢查出相當多型態轉換的問題,促使我想寫下這篇文章釐清 C 語言型態轉換的規則及可能的問題。

可能的安全問題

C語言包含不同的型態,不同型態之間做運算就會適用不同規則,這也是 C 語言型態轉換困難的地方,進行型態轉換,可能會發生以下問題是值得我們留意的

  • loss of value: 如果今天我們將 integer 轉換到 char 型態,由於 int 型態大小遠大於 char,就會造成這種狀況
  • loss of sign: 如果我們將 unsigned int 與 signed int 進行運算,原本 signed int 被迫轉換成 unsigned int,就會造成這種狀況
  • loss of precision: 從 floating 型態轉換到 integer 型態
  • loss of layout: 型態轉換發生在從 pointer to struct 到 pointer to char

型態轉換又分為兩種:

  1. explicit conversion: 就是大家會在教科書上看到的 cast,開發者可以強制轉換任何資料的 data type。
  2. implicit conversion: 這是大部分開發者都會疏忽的,由 compiler 來幫你轉換型態,以下會描述什麼情況下會發生 implicit conversion,我們並不需要牢記這些規則,但必須要在開發時候隨時留意。

閱讀全文〈淺談 C 語言的型態轉換〉