不可解問題 I|Stanford CS103 第 23 堂
本講從「從 R、RE 與 UTM 接回來」推進到「self-reference 回顧的三個程式」,依官方例題重建定義、推導與易錯邊界。
本講從「從 R、RE 與 UTM 接回來」推進到「self-reference 回顧的三個程式」,依官方例題重建定義、推導與易錯邊界。
本講從「HALT 的定義與位置」推進到「為何 HALT 可辨識」,依官方例題重建定義、推導與易錯邊界。
本講從「Lava Diagram 的兩個辨識任務」推進到「Rice's Theorem 的 投影片 版判讀」,依官方例題重建定義、推導與易錯邊界。
本講從「decidable 不等於 feasible」推進到「efficiency 要先選 resource」,依官方例題重建定義、推導與易錯邊界。
最後一講把證明、圖論、自動機與可計算性重新接起來,再對照會直接使用這些基礎的 Stanford 後續課程。
CS107 第 15 講把 x86-64 的 mov 拆成 immediate、register、absolute、indirect、displacement、indexed 與 scaled indexed operands,並以 D + R[b] + R[i]×s 統一解讀 pointer dereference 和 array access。
CS107 第 16 講把 b/w/l/q 資料寬度、subregister、movs/movz、lea、呼叫慣例、算術邏輯與 shift 串成一套規則:先確定操作寬度,再追蹤來源、目的與是否真的讀取記憶體。
CS107 第 18 講以 ZF/SF/CF/OF 串起 cmp、test、signed/unsigned conditional jumps,再拆解 if、loops、dynamic instruction count、setcc 與 cmovcc。
CS107 第 17 講先完成 x86-64 的 full-width multiplication 與 division,再沿著 instruction bytes 追蹤 %rip,最後以 direct/indirect jmp 說明程式如何離開預設的順序執行。
CS107 第 19 講追蹤 %rsp、push/pop、call/ret、parameters、return values、stack locals 與 caller/callee register discipline,建立可跨函式維持資料與控制流的 ABI 契約。
CS107 第 14 講用 sum_array 的 10 條 x86-64 指令拆開反組譯輸出:左側是位址與機器碼,右側是 AT&T assembly;讀者的任務是由 opcode、operand、register 與控制流程還原 C,而不是手寫組合語言。
CS107 第 7 講先用 strchr、strstr、strspn 建立指標式字串掃描,再指出只驗證內容仍擋不住 buffer overflow:安全邊界必須同時涵蓋輸入規則、目的地容量、終止字元與記憶體檢測。
CS107 第 25 講用精簡投影片建立 cache 的核心模型:記憶體存取成本不均,較小且較快的層級保存可能再次使用的資料,而 temporal 與 spatial locality 決定程式能否受益。
CS107 第 6 講把 C 字串拆回 char 陣列、終止空字元與位址:strlen、strcmp、strcpy、strncpy、strcat 的每一個便利,都以呼叫者維持容量與終止條件為代價。
CS107 第 24 講用矩陣乘法與 Callgrind 建立量測流程,再拆解 GCC 的 constant folding、共同子運算式消除、dead-code elimination、strength reduction、code motion 與遞迴轉迴圈;最佳化從瓶頸證據開始。
CS107 第 23 講把 explicit free list 推進到原地 realloc:縮小時切出可用區塊,放大時吞併右側 free blocks,做不到才配置、複製、釋放;每一步都要同時維持實體 heap 與邏輯 free list。
CS107 第 12 講先用 char * 完成 byte-wise generic swap 與 rotate,再以 function pointer 把 bubble sort 的走訪機制和比較規則拆開;void * 解決資料型別,callback 解決行為差異。
CS107 第 13 講把 bool callback 升級成三向 comparator,再把 void *、element width 與 const void * callback 合併成完整 generic bubble sort,最後對照 qsort、bsearch、lfind 與 lsearch。
CS107 第 11 講先收完 calloc、strdup、free、realloc 的 heap 契約,再把 swap 從多份型別專用程式改造成 void * 加 byte count:C 的泛型不是保留未知型別,而是明確交接位址、寬度與解讀責任。
CS107 第 21 講從 allocator 的 alignment、throughput 與 utilization 目標出發,以 bump allocator 和 implicit free list 拆解 metadata、splitting、placement、內部與外部碎片,以及 free 後為何必須 coalesce。