KZnight

What I cannot create, I do not understand.

你所不知道的 C 语言: 递归调用篇

在许多应用程序中,递归 (recursion) 可以简单又优雅地解决貌似繁琐的问题,也就是不断地拆解原有问题为相似的子问题,直到无法拆解为止,并且定义最简化状况的处理机制,一如数学思维。递归对 C 语言程序开发者来说,绝对不会陌生,但能掌握者却少,很多人甚至难以讲出汉诺塔之外的使用案例。

究竟递归是如何优雅地解决真实世界的问题,又如何兼顾执行效率呢》我们从运作原理开始探讨,搭配若干 C 程序解说,并且我们将以简化过的 UNIX 工具为例,分析透过递归来大幅缩减程式码。

或许跟你想象中不同,Linux 核心的原始程式码里头也用到递归函数呼叫,特别在较复杂的实作,例如文件系统,善用递归可大幅缩减程式码,但这也导致追踪程序运作的难度大增。

你所不知道的 C 语言: 函数调用篇

本讲座将带着学员重新探索函数呼叫背后的原理,从程序语言和计算机结构的发展简史谈起,让学员自电脑软硬件演化过程去掌握 calling convention 的考量,伴随着 stack 和 heap 的操作,再探讨 C 程序如何处理函数呼叫、跨越函数间的跳跃 (如 setjmplongjmp),再来思索资讯安全和执行效率的议题。着重在计算机架构对应的支援和行为分析。

并行程序设计: 执行顺序

多執行緒環境下,程式會出問題,往往在於執行順序的不確定性。一旦顧及分散式系統 (distributed systems),執行順序和衍生的時序 (timing) 問題更加複雜。

我們將從如何定義程式執行的順序開始說起,為了簡單起見,我們先從單執行緒的觀點來看執行順序這件事,其中最關鍵知識就是 Sequenced-before,你將會發現就連單執行緒的程式,也可能會產生不確定的執行順序。

0%