windows程序设计读书笔记(指针的用处)
今天又看了一天<<Windows程序设计>>,今天看的是第五章,图形基础.
看完以后终于恍然大浯:原来以前用的VB里面那些函数,都是简单封了一下API就能实现的.
今天特别想到的,是指针这东西在程序结构中的使用.
看Windows提供的API,指针几乎无处不在,调用用一个指针,返回也用一个指针.
使用指针的好处,我个人认为最大的好处是内存使用是有序的,你必须首先定义出要使用的原数据的内存,以及返回点的内存,把这些内存全分配好,然后调用功能进行处理,这样在功能处理完成以后,直接去定义的出口点,就可以得到返回结果.
在整个过程中,程序所使用的内存是固定的,没有变化的.
而如果不支持函数指针的话,那么就比较复杂了.
调用函数本身必须负责重新分配一块内存出来,然后返回一个新的内存点给调用者.
Java正是由于设计时不支持指针,所以每次调用都可能需要重新分配内存,这个在系统设计上应该说是有缺陷的.
举例:
windows API中有这样一个函数,可以用来将两个区域进行组合.
CombinRgn(hDestRgn,hSrcRgn1,hSrcRgn2,iCombine);
这个调用里面,hDestRgn,hSrcRgn1,hSrcRgn2都是3个区域的句柄,或者说是指针,调用结束以后,hDestRgn里面就存放了新的合并后的区域.
在这个过程中,hDestRgn本身是没有变化的,变化的是他的地址所存放的内容.
这样在整个过程中原始调用者的内存地址和返回值的内存地址是不变的,而改变的是返回值地址里面存放的内容.
这样的系统设计,是早期的设计思路实现;而java中去掉指针以后,这些都无法实现了.关于java中由于去掉指针带来的弊端,有时间专门写篇文章仔细分析分析.
看完以后终于恍然大浯:原来以前用的VB里面那些函数,都是简单封了一下API就能实现的.
今天特别想到的,是指针这东西在程序结构中的使用.
看Windows提供的API,指针几乎无处不在,调用用一个指针,返回也用一个指针.
使用指针的好处,我个人认为最大的好处是内存使用是有序的,你必须首先定义出要使用的原数据的内存,以及返回点的内存,把这些内存全分配好,然后调用功能进行处理,这样在功能处理完成以后,直接去定义的出口点,就可以得到返回结果.
在整个过程中,程序所使用的内存是固定的,没有变化的.
而如果不支持函数指针的话,那么就比较复杂了.
调用函数本身必须负责重新分配一块内存出来,然后返回一个新的内存点给调用者.
Java正是由于设计时不支持指针,所以每次调用都可能需要重新分配内存,这个在系统设计上应该说是有缺陷的.
举例:
windows API中有这样一个函数,可以用来将两个区域进行组合.
CombinRgn(hDestRgn,hSrcRgn1,hSrcRgn2,iCombine);
这个调用里面,hDestRgn,hSrcRgn1,hSrcRgn2都是3个区域的句柄,或者说是指针,调用结束以后,hDestRgn里面就存放了新的合并后的区域.
在这个过程中,hDestRgn本身是没有变化的,变化的是他的地址所存放的内容.
这样在整个过程中原始调用者的内存地址和返回值的内存地址是不变的,而改变的是返回值地址里面存放的内容.
这样的系统设计,是早期的设计思路实现;而java中去掉指针以后,这些都无法实现了.关于java中由于去掉指针带来的弊端,有时间专门写篇文章仔细分析分析.