网上人们普遍反映thinking in c++将const folding译为常量折叠是种误导,我觉得译的还行,本来folding就有折叠的意思,就是把原来的东西变小,而象const int i = 2*2;编译器确实将2*2算成4了,以后碰到i就用4替换,这个计算2*2的过程据说叫常量折叠--const folding,而用4替换i的过程叫做复写传播--copy propagation.他们都是编译器的优化技术
Windows在NT之后,才开始保护进程,每个进程是独立的虚拟地址空间,操作系统负责映射和保护,各个进程是互不干扰的,这样才使得NT以后的Windows稳定下来。此前版本的Windows,仍然与DOS一样,可以用真实地址访问的。虽然如此,进程之间通讯仍然是现实需求,Windows也提供了API满足这种需求,但一切在Windows调度之下,不是程序自己可以控制的。事实上,Windows下的所有程序,及其所有函数,都不是自己运行的,而是Windows系统适时调用的,这种程序模式,与DOS时代教人们认识的截然相反,所以现在的.EXE和.DLL,根本没有区别,它们都是“程序集”,在Windows眼中,不管你怎么打包,都仍然是散的,Windows需要什么就从中提取什么,不到你程序作主。不同操作系统下的编译器,把程序编译出来之后,模式完全不同,只不过在源代码级别上你看起来可移植性很强罢了。尽管你现在编写的代码可以是旧式的代码,比如TC for Windows下面那样的代码,只是源代码不变而已,但编译器已经把这些代码用完全不同的方式重新实现了,是必须能在Windows下执行的模式,所以你学TC的观念,实际上编译器骗了你也不知道,还以为那种模式真的可行。Unix之类,也是有不同的模式的,具体它怎么处理语言的实现,是另外不同的事情。也就是说,现在不要再像以前那样,对底层太过关心,API是中间层,它掩盖了实现的细节,向你呈现一致的编程界面,你只管使用这种高级界面就是了,除非你决定要做中间层,否则技术触角无需伸到那里,了解大概原理,知道有那么一回事就是了。比如现在在.NET中,连Win32的API都封装了统一的高级界面(类)供你使用,这个时候,还去钻研Win32 API,反而把事情弄复杂,须知系统底层API随时会变,但封装后的.NET类库高级界面是会尽力维持的,你不必跟着底层永远地变,那也与你无关。