深入C语言和程序运行原理

深入C语言和程序运行原理 / 掌握 C 程序从编写到运行的全链路法则

于航 (PayPal 技术专家)
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词|时至今日,如何更好地拥抱现代 C 语言?

    今天,我想带你从不同的视角来学习 C 语言:结合 C 核心语法、汇编代码、计算机体系结构,深入理解 C 语言、应用程序和操作系统三者之间的协作关系。

  • 课前热身|学习这门课前,你需要了解哪些知识?

    今天,我会用通俗易懂的方式,为你介绍汇编语言、寄存器这些常用的底层基础知识。

  • 01|快速回顾:一个 C 程序的完整生命周期

    今天,我会从语法细节和语言特性、微观和宏观相结合的角度,带你快速、直观地回顾 C 语言的一些基础内容。

  • 02|程序基石:数据与量值是如何被组织的?

    由源代码的“表象”到计算机内部,我来带你看看一个C程序中的数据与量值是如何被组织的。

  • 03|计算单元:运算符是如何工作的?

    今天我们来看看,作为提供计算能力的核心语法结构,C 语言中的运算符究竟是如何被编译器实现的。

  • 04|控制逻辑:表达式和语句是如何协调程序运行的?

    今天,我主要讲解 C 语言中用于描述程序运行逻辑的两种“控制单元”,即表达式和语句背后的实现细节。

  • 05|代码封装(上):函数是如何被调用的?

    今天,我们来看看 C 语言中,编译器实现函数调用时所遵循的一系列规则,以及相关的栈和栈帧的概念。

  • 06|代码封装(下):函数是如何被调用的?

    今天,我们来看看有关 C 函数中参数求值顺序、递归调用、旧式声明的内容,这会帮你更加深入地理解 C 函数的运作细节,写出更加健壮、性能更高的代码。

  • 07|整合数据:枚举、结构与联合是如何实现的?

    今天,我会主要介绍 C 语言中的枚举、结构与联合这三种数据类型,并和你一起探究它们在机器指令层面的具体实现方式。

  • 08|操控资源:指针是如何灵活使用内存的?

    今天我们来看下,在 C 语言中指针都有哪些使用方式,以及在语法背后,这些方式都是如何通过机器指令来实现的。

  • 09|编译准备:预处理器是怎样处理程序代码的?

    今天,我们来看看有关 C 预处理器的内容,包括 C 预处理器的相关背景知识、预处理的基本流程,以及宏编写技巧和使用注意事项。

  • 10|标准库:字符、字符串处理与数学计算

    今天,我主要介绍 C 语言标准库中与字符、字符串处理,以及数学运算有关的内容。

  • 11|标准库:深入理解标准 IO

    今天,我将为你深入介绍 C 语言中的标准 IO 模型,以及它背后的一些原理。

  • 12|标准库:非本地跳转与可变参数是怎样实现的?

    今天我们来聊一聊 C 语言中的非本地跳转与可变参数函数,我会分别介绍它们的基本用法与实现原理。

  • 13|标准库:你需要了解的 C 并发编程基础知识有哪些?

    今天,我们来一起了解下并发编程的主角,线程,以及我们在围绕它进行多线程开发时可能遇到的一些常见问题。

  • 14|标准库:如何使用互斥量等技术协调线程运行?

    今天,我们来看看 C 语言为并发编程提供的几大利器:互斥量、原子操作、条件变量,以及线程本地变量。

  • 15|标准库:信号与操作系统软中断有什么关系?

    今天,我们来看看什么是信号,以及如何在 C 代码中通过标准库提供的相关接口与信号进行交互。

  • 16|标准库:日期、时间与实用函数

    今天,我们来看看 C 标准库中与日期、时间以及实用函数有关的内容。

  • 17|标准库:断言、错误处理与对齐

    今天,我们来看一看与 C 标准库相关的三个话题:断言、错误处理,以及对齐。

  • 18|极致优化(上):如何实现高性能的 C 程序?

    今天,我主要会为你介绍四个优化 C 代码的技巧,它们分别是利用高速缓存、利用代码内联、利用 restrict 关键字,以及消除不必要内存引用。

  • 19|极致优化(下):如何实现高性能的 C 程序?

    今天,我们继续讨论几种常见的 C 代码和程序优化技巧。

  • 20|生产加速:C 项目需要考虑的编码规范有哪些?

    对于使用 C 语言编写的、需要多人协作的项目,我们应该从哪些角度来制定团队的编码规范?

  • 21|生产加速:如何使用自动化测试确保 C 项目质量?

    今天我主要介绍与 C 语言项目有关的一些常用测试类型,以及我认为的“真正的”测试自动化。

  • 22|生产加速:如何使用结构化编译加速 C 项目构建?

    今天,我主要为你介绍如何组织 C 项目的源代码目录结构,以及如何进行 C 项目的结构化编译与跨平台自动化构建。

  • 期中测试|来检验下你的学习成果吧!

    来做套题,检验一下自己对 C 语言相关知识的掌握程度吧!

  • 23|实战项目(上):一个简单的高性能 HTTP Server

    让我们通过实现一个完整的 C 语言项目,在实战过程中体会 C 这门语言的独特魅力。

  • 24|实战项目(下):一个简单的高性能 HTTP Server

    我会带你从基本的项目目录创建,到模块功能编写,再到代码编译和程序运行,一步步地完成整个项目的开发过程。

  • 25|可执行二进制文件里有什么?

    今天我们来看下,经常被提及的“二进制可执行文件”究竟是什么。

  • 26|进程是如何使用操作系统内存的?

    今天,我们会先从整体的视角看看内存在计算机系统中的作用,然后再一起探究进程是如何在操作系统的控制下与计算机内存交互的。

  • 27|编译器在链接程序时发生了什么?

    今天我主要为你介绍 Linux 中的静态链接,以此为例,带你深入了解了编译器在链接程序时发生了什么。

  • 28|程序可以在运行时进行链接吗?

    今天,我主要为你介绍动态链接的基本实现方式,和基于此进行的加载时链接与运行时链接这两者的主要区别。

  • 29|C 程序的入口真的是 main 函数吗?

    如果将目光移到那些无法直接通过 C 代码触达的地方,你会发现 C 程序的执行流程并不算简单。

  • 30|ABI 与 API 究竟有什么区别?

    今天,就以你熟悉的 C 语言体系为例,我们来一起看看 ABI 与 API 二者分别指代什么内容,有什么区别。

  • 31|程序如何与操作系统交互?

    系统调用究竟是什么?它与我们编写的应用程序函数有何不同?通常情况下它又是怎样实现的呢?

  • 春节策划一 | 构建自己的知识体系,让学习的“飞轮”持续转动

    今天我想跟你分享下我对“学习”的一些认知,以及我一直使用的“飞轮”学习法。

  • 春节策划二 | 关于 C 语言,我有这些书籍想推荐给你

    对于 C 语言学习来说,从基础到进阶,都有哪些经典书籍可以参考呢?

  • 春节策划三 | JIT Compilation:一种特殊的程序执行方式

    今天我想和你分享的是一篇我之前写过的文章。这篇文章主要介绍了什么是 JIT Compilation 技术,以及如何使用 C++ 语言来实现一个简单的 JIT 编译器。

  • 课堂答疑(一)|前置篇、C 核心语法实现篇问题集锦

    今天,我会以加餐的形式,为你剖析一些值得讨论的思考题,以及你们提出的有代表性的问题。

  • 课堂答疑(二)|C 工程实战篇问题集锦

    这次的答疑加餐,我从 C 工程实战篇模块的课后思考题中精选了同学们讨论比较多,也比较有代表性的三个问题,来对它们进行详细分析。

  • 大咖助阵|LMOS:为什么说 C 语言是一把瑞士军刀?

    操作系统和C语言的起源有着千丝万缕的联系,今天我就先从C语言的起源和发展历史讲起,然后从C语言自身的语法特性出发,向你展示这门古老的语言简单在哪里,又难在哪里。

  • 大咖助阵|LMOS:用面向对象的思想开发 C 语言程序

    今天我具体讲讲,怎么用面向对象的思想开发 C 语言程序。

  • 大咖助阵|罗剑锋:为什么 NGINX 是 C 编程的经典范本?

    今天,我来聊聊 C 语言编程的经典范本 NGINX,并向你展示用 NGINX 学习 C 语言编程的正确打开方式。

  • 大咖助阵|海纳:C 语言是如何编译执行的?(一)

    我会通过一个简单的例子,来说明一个 C 编译器有哪些基本步骤。

  • 大咖助阵|海纳:C 语言是如何编译执行的?(二)

    这节课,你要掌握的不仅是文法分析的具体技术,更重要的是要理解它处理格式化文本的原理。

  • 加餐 | 和 C 语言相比,C++ 有哪些不同的语言特性?

    C++ 与 C 相比究竟有何不同?

  • 大咖助阵|海纳:C 语言是如何编译执行的?(三)

    一种最简单的执行模型

  • 大咖助阵|Tony Bai:Go 程序员拥抱 C 语言简明指南

    来看看 C 与 Go 这两种语言之间的相似性和区别。

  • 期末考试|来赴一场满分之约吧!

    为了帮你检验自己的学习效果,我特意给你准备了一套结课测试题。

  • 结束语|工业 4.0 时代,C 语言还有哪些应用场景?

    在工业 4.0 时代,无论你是否直接使用 C 语言编码,都会在无形当中直接或间接地与 C 语言打交道。

你将获得

  • 7 大 C 核心语法背后的实现细节
  • 快速掌握 C 标准库的功能与原理
  • C 项目工程化的 4 类实用技巧
  • 深入 C 程序运行的全流程

讲师介绍


课程介绍

  • C 语言这么基础,大家基本都熟悉啊,还需要从头开始学吗?
  • 用 C 语言做应用层开发时,总感觉无从下手,和 Python、Java 比起来,C 语言产出效率是不是太低了?
  • 在新语言层出不穷的今天,C 语言已经诞生这么久了,会不会就要过时了?
  • ……

其实这些都可以归结为两个问题。第一个,C 语言可以用来干啥?第二个,学 C语言,学习重点是什么?

C 语言远远没有过时,甚至可以说,这个世界上几乎所有重要的软件都与 C 有着直接或间接的关系。C 语言精确的程序控制能力和高效的运行时性能,让它被广泛应用于实现操作系统、嵌入式系统应用、编译器、数据库、驱动程序,以及服务器应用等较为底层和基础的系统级程序。

而且,即使你不使用 C 语言进行开发,深入学习 C 语言,也是你修炼编程内功、成为高手的必经之路。C 语言抽象层次低,学习它能够让你从基础层面了解程序是如何工作的。理解了计算机系统底层运作机制,你在设计更复杂、性能更高的程序时,就能得心应手、融会贯通。

不过,如果要发挥 C 语言的最大威力,只掌握 C 语言的基本语法是远远不够的。我们还需要深入到 C 语言的内部,去了解⼀个 C 程序从编写到编译,再到被运⾏的整体流程细节。只有做到“知其然”并“知其所以然”,方能运用自如,百战不殆。

于是,我们和于航老师一起设计了这门“不一样的 C 语言课”,想要带你从新的视角来学习 C 这门“旧”的语言。

课程模块设计

这门课分为四个模块,从 C 语言的核心语法实现到 C 程序的运行原理,带你掌握 C 程序从编写到运行的全链路法则。

前置篇

快速了解汇编语言、寄存器这些较为底层的基础知识,并且回顾一个 C 程序从编写到运行的完整生命周期。另外,还会用一个比较复杂的 C 程序,带你快速回顾 C 语言的核心语法。

C 核心语法实现篇

梳理 C 语言7大核心语法“背后的故事”,带你了解编译器如何在汇编层面实现这些语法。你会对 C 程序的运行细节有更深刻的理解,从而更好地掌握并优化程序运行。

C 工程实战篇

介绍 C 语言在大型工程实战中的必备技巧,主要包括:快速掌握 C 标准库的重要功能,以及这些功能背后的实现原理;掌握编写高性能 C 代码、编码规范、结构化测试、结构化编译这些 C 项目工程化的实用技巧。

C 程序运行原理篇

为你介绍一个 C 程序是如何通过编译,并最终被操作系统运行的。程序的运行涉及到众多与操作系统的交互细节,你将在这个模块里详细了解。


课程目录


适合人群

对C语言或类C语言的基础语法有一定了解,想深入学习C语言和程序运行原理的人群。


特别放送

免费领取福利



限时活动推荐


订阅须知

随机推荐

CHARLES&KEITH22冬新品CK2-40671449子母链条大容量软托特包女包...

骆驼女鞋时尚马丁靴短靴英伦圆头厚底女靴A045036106M黑色绒里真...

乔思伯(JONSBO)松果D31 MESH副屏版黑色 MATX机箱(双360冷排评...

携首护膝保暖老寒腿男士绑带运动加长款护秋冬艾草发热护膝老人膝...

葵花药业维生素b族60片多种复合成人男士女士含b1b2b6叶酸怎么样...

秋田满满溶豆婴儿6个月婴儿零食酸奶溶豆原味宝宝零食溶豆豆18g到...