侯捷老师《C++及标准库》课程培训 记录

这周一至周三(2013.07.22-2013.07.24)三天时间,有幸参加到侯捷老师的《C++及标准库》课程培训,不仅加深了对C++的理解,了解了STL的许多细节,而且重温了大学课堂的生活,十分高兴。感谢公司给予这样宝贵的机会,感谢侯捷老师的精彩课程,更加感谢他创作,翻译了这么多优秀书籍,为广大国内程序员指点迷津,授业解惑。

这次课程面向的是初级程序员,所以有些知识点在大学中已经接触到,但温故而知新也不失为一件乐事。以下是我对于这三天课程的一些知识点总结。

Continue reading

pdb文件 小结

.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会在构建项目时创建PDB文件。

在这里要区分两种情况:

1、构建静态库时,可以在工程属性 –> C/C++ –> 输出文件 –> 程序数据库名 设置生成的pdb文件名称,如果不指定,默认是生成为VCx0.pdb,这里x是VS版本号,例如用VS2005,就会生成VC80.pdb。这里就会产生一个疑问,编译静态库时默认生成的.pdb文件名字都一样,那引用这个静态库的项目最后能找到正确的.pdb文件吗?答案是肯定的,因为VS会在生成的文件中嵌入 .pdb 文件的路径。

举个例子,在Project/ToolA下,构建了一个静态库ToolA.lib,对应生成一个vc80.pdb,同样在在Project/ToolB下,构建了一个静态库ToolB.lib,对应生成一个vc80.pdb。然后最终的工程Work.exe同时链接了这两个静态库.这时,生成Work.pdb的时候,就会在ToolA.lib中找到它对应的符号文件路径Project/ToolA/vc80.pdb,以及ToolB.lib对应的符号文件路径Project/ToolB/vc80.pdb,合并生成最终工程的Work.pdb。

Continue reading

for while 循环 区别 汇编 | for循环与while循环在DEBUG环境下生成的汇编码的区别

for while 循环 区别 汇编

是否有听人讲过for while 循环会差一条汇编语句呢?

是否有人跟你说过while会比for快呢?

for 跟 while 生成的汇编码是否一样呢?

答案是,对,也不对。因为在DEBUG环境下,VS编译器为for 跟 while 循环生成的汇编代码确实有区别,for的确是多了一条跳转语句,但是,这仅仅是DEBUG环境下,在RELEASE版本里面,编译器会做各种优化,而且不同厂商的编译器还有不同的优化策略,所以,除非某人确切告诉你,他是从RELEASE版本下的EXE中逆向工程得到的汇编码里明确看到区别,不然别相信他。而且我猜测,RELEASE版本里不会有区别的(仅仅是我猜测,求大侠拍砖)。

好,那我们来看看DEBUG环境下差别在哪里,为什么会有这差别: Continue reading

C++ 虚函数 虚表 virtual table | 浅谈虚函数与虚表(virtual table)

C++ 虚函数 虚表 virtual table

 

以前在百度空间写的两篇文章

 

浅谈虚函数与虚表(virtual table):

http://hi.baidu.com/00bin0/blog/item/55847fe8cfaaa63f2cf534c7.html

 

浅谈虚函数与虚表(virtual table)(二):

http://hi.baidu.com/00bin0/blog/item/14c1998dc8a5c705c9fc7ac0.html

 

请大侠斧正…