OK,编译运行之,至少在VC环境里会出现“A::sayHello()”。 之所以要用sprintf和atoi是因为我不知道怎么把PFN转化程P_SAYHELLO,只好用这种“不干净”的代码了,呵呵:-) 因为定义C++的类时,代码和数据都浮动。然而代码浮动是没有意义的。 ========================================= 不懂是什么意思。至于浮动代码没意义就不对了,编译出来的程序不会知道自己会被加载到虚拟空间的什么地方,于是程序里都是一些相对于程序起始地址的偏移量,一些loaders甚至在加载的时候动态修改这些代码,完成最后的定位工作。大家去看看John R. Levine的《Linkers & Loaders》就什么都明白了。 对于同一个进程,代码当然只能有一份,因为代码不会自己改变自己的。所以,在C++中加了不能取类函数地址的限制。 ========================================= 上面给出的代码说明了可以取函数地址。至于上面这句话其中的因果关系,我还是没有能导出来。代码不会自己改变自己吗?决大多数情况下是这样,然而,一些特殊的程序,比如病毒,就完全有可能自己修改自己。其实从CPU的角度看,只要你在ring0把代码的属性改为可写,那么你想怎么改都可以:-) C++的设计理念是数据和代码都是浮动的,这样可以把整个对象传给一个进程活是当成一个数据类型,把这个对象从这个进程传入到另一个进程中去用。在这基础上,发展出分布对象。 把对象放入另一个计算机中去进行运算,运算完成后,只需要返回运算的结果。这种理论的模型到现在还不可能都做到,就是操作系统也做不到这一点。 |
正在阅读:《编程高手箴言》读后(4)《编程高手箴言》读后(4)
2004-04-08 14:39
出处:CSDN
责任编辑:sdq
键盘也能翻页,试试“← →”键