这章到底在补什么能力缺口
很多写 C/C++ 或者做后端的人,能把业务代码敲完,但一被问到“程序到底是怎么跑起来的”就卡壳。你写的是 main 函数,可 main 并不是进程的真正起点;程序退出了,但退出前操作系统替你做了哪些收尾,你也未必说得清。这门课的“进程环境”这一章,补的就是这块底层逻辑缺口。它不教你写具体业务功能,而是把进程从启动到终止的整条链路拆开给你看:启动代码是谁提供的、裸机环境和操作系统环境下程序运行的区别在哪、正常终止和异常终止在系统调用层面有什么不同、atexit 注册的钩子函数按什么顺序执行。如果你之前只会写 main 里的逻辑,出了段错误或者内存越界只会重启进程,那这章就是帮你把“黑盒”变成“白盒”的钥匙。适合有基础 C 语法和 Linux 基本操作的人看,零基础直接啃会吃力。
建议先啃哪几块以及怎么配练习
别按顺序一节节刷,建议先抓两条主线。第一条是“启动到终止”主线:重点看启动代码的作用、程序在系统下如何被拉起来、_exit 和 exit 的差异、atexit 注册顺序,最后用“全过程”那节串起来。第二条是“环境变量和内存布局”主线:搞清楚 main 函数参数怎么传进来、环境变量在哪存、临时改和长期改的区别、以及进程的 C 内存空间布局到底怎么分。练习方面,资料包里的视频一定要边看边敲,不要光听。看完启动流程,自己写段代码用 atexit 注册三个函数,打印调用顺序验证;看完环境变量 API,自己写个小程序读取、修改、打印环境表;看完内存布局,用代码打印不同变量的地址,对照着确认代码段、初始化数据段、未初始化段、堆、栈的位置。光看不敲,过两天全忘。
学完能独立回答什么问题
这章学完,你应该能不查资料直接答清楚这几件事:main 函数之前操作系统和链接器替你做了什么,程序正常退出时 atexit 注册的函数和 _exit 之间是什么调用关系,环境变量在进程地址空间里存在哪一块,修改环境变量为什么有的只影响当前进程有的能持久化。更重要的是,遇到程序崩溃或者异常退出,你能判断是走到哪一步出了问题,而不是只会盯着终端报错发呆。这些底层概念不搞清,后面学到进程控制、信号处理、多线程时,你会发现自己一直在半懂不懂地抄代码。把进程环境这块地基砸实,后面的系统编程才不会越学越虚。
课程目录
1 为什么要学习本章 (12:11) 2 启动代码是什么,谁提供的,作用是什么 (16:19) 3 裸机上的程序是如何运行起来的 (16:53) 4 程序是如何启动起来的 (21:46) 5 程序的正常终止1 (16:53) 6 _exit和异常终止 (12:13) 7 atexit注册进程终止处理函数 (14:12) 8 进程启动到正常终止的全过程 (23:24) 9 main函数参数、windows的环境变量 (19:50) 10 再看看windows的环境变量 (12:33) 11 临时和长期修改环境变量 (25:51) 12 与环境变量相关的API (25:51) 13 进程环境之C内存空间布局和库 (05:54)





