正在阅读:《编程高手箴言》读后(4)《编程高手箴言》读后(4)

2004-04-08 14:39 出处:CSDN 作者:seacloud 责任编辑:sdq

  编译中,事实上引入了很多不可预测的因素。编译器是帮你把你的想法变成机器可以运行的代码,即把你的思想变成在内存中的相应映射。如果你真正了解了这些,编译器也就不是很重要了... ...很多做程序的人并不知道平台的作用,其实平台才是最重要的。有些人认为自己懂了VC,就懂了计算机了,实际上离计算机还有十万八千里。
=========================================
  呵呵,只要你对语言了解,那么从原理上看你就应该知道你的代码的具体含义,除非编译器有bug。老实说,在windows上的这些开发语言中,VC的门槛还是相对较高的,我想只要是真正懂VC的人,恐怕都不会的认为自己就懂计算机了吧。别说计算机这么个大范畴了,你就算精通VC了又怎么样,windows源码没有给你,你还是有无数个问号!懂计算机?谈何容易啊。

  如果把类剖析出来会发现有一堆Vtable的指针,这个指针再jmp到一个函数的地址。
=========================================
  实际上,如果一个类没有虚函数,编译器才懒的生成VTable呢。用VC生成的代码是在call后jmp的,然而用g++编译出来的程序就是直接call,而没有一个jmp的过程。VTable的作用就是用来解决所谓的“后期绑定”的,仅此而已。而如果一个class没有virtual function,那么这个class几乎等价于一个struct加一堆函数而已,根本没有“后期绑定”的必要,因此也没有必要带上个VTable。这一点与Java不同,Java我印象中好像都是后期绑定的。其实虚函数,后期绑定,VTable这些概念很重要,尤其在看Microsoft的COM的时候。想必大家都研究《Thinking in C++》了,因该很清楚了吧,呵呵~~~

  如果你用到类里面的函数时,并且不是静态分配,而都是动态分配,当程序做了很多内存的操作后,如果某个地方出了问题,就会出现call地址错误。
=========================================
  呵呵,这十有八九是把栈给冲垮了。有时候,在你的函数里调用系统的一些库函数,如果出一些莫名其妙的问题,你就要注意是不是你没有注意那些库函数的细节,导致你在栈上分配的变量传给这些库函数后,又被这些库函数用和你想法不一样的方法给修改了,结果造成了栈被破坏了。

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品