400-886-0806
C++ Startup揭密:C++程序的生前和死后

优惠价:¥480.00

5636
人次学习

课程简介

如果C++程序有所谓生前和死后,相信很多C++程序员会很感兴趣,一如人们对于人类的生前死后总是那么兴致勃勃。

那么,C++程序有所谓生前和死后?难道main()不是C++程序的进入点?main()之前还有所谓生前?难道不是main()一结束C++程序就结束了?main()之后还有所谓死后世界?难道有什么动作既是我们程序员所写而又可以在main()之生前或死后执行?

也许你马上想到了全局对象 (global objects) 的构造函数和析构函数,它们就是由程序员所写而又分別在main()之生前和死后运行。
也许你还想到了atexit()这个奇特而有趣的ANSI C函数。

是的,main()必须有调用者(caller),调用者必须先做很多铺陈,才能让程序员所写的某些代码抢在main()之前运行,并且程序一旦进入main()之后立刻得以享用heap、享用I/O、享用环境变量…,又让程序员写的某些代码落在main()之后运行。它必须做CRT (C Runtime Library)的一切初始化工作(initializations),也必须做CRT的一切善后清理(clean-up)。

这就是所谓Startup code(启动码)。

这门课就带大家认识 Windows平台下的Startup code。(Unix/Linux平台下的工作原理乃至工作次序也相同。) 我取出Windows/Visual C++平台下默认的Startup code源代码,逐一解说其每一个重要动作,并绘制大量图片帮助你认知和学习。

通常一门课程总要提及带给学习者什么样的利益。本课程对于你的应用程序 (application programs) 开发,可以说沒有任何利益,因为太少太少人需要自行开发Startup code。但如果你是一个对于各种基础知识內核原理感兴趣的人,对于各种隐身幕后的奥秘感兴趣的人,这门课能满足你的好奇心,让你完全通透C++程序的整个运行过程。这门课带来的技术成长是无形于应用的,而无形,有时甚于有形。

讲师介绍

侯捷

侯捷先生是两岸著名技术教育者,计算机图书作者、译者、书评人。著有《深入浅出MFC》、《多态与虚拟》、《STL源码剖析》、《无责任书评》三卷,译有众多脍炙人口的高阶技术书籍,包括Meyers所著的“Effective C++”系列。侯捷先生还兼任教职于元智大学(台湾)、同济大学(大陆)、南京大学(大陆)。其著作、讲座影响大陆一代程序员。

课程大纲

1.前言,如何自定Startup code
2.默认的Startup code在哪儿,main()生前和死后的call stack
3.Startup code源码摘要
4.heap_init()——Startup的首要工程(上)
5.內存分配精解(一)
6.內存分配精解(二)
7.內存分配精解(三)
8.內存分配精解(四)
9.main()生前所有內存分配之实例观察与解释
10.HeapAlloc()的角色和影响
11.io_init()——Startup的第二项大工程 (上)
12.io_init()——Startup的第二项大工程 (下)
13._cinit()——Startup的第三项大工程