楼主 liuguansky |
[table][tr][td]Q:为何窗体中PUBLIC变量在卸载后会依变量类型的不同而显示出不同的值变化? 关于窗体中PUBLIC变量在卸载后的变化疑问? 当public一个变量类型为string时,unload窗体后,变量也清空了;而定义类型为integer时,unload窗体后,变量依然可以存在。 请问为什么变量类型不同,在UNLOAD窗体后会有不同的处理? A:感谢EP社区的吕布会员对问题的解答 :由于字符串变量大小不确定,所需内存大小也是不确定的。字符变量是一个指向字符串实际存放起始位置的指针。对字符变量内存的管理,只对字符串变量所指向的指针进行管理,释放字符变量,实际就是把字符串指针指向0.而字符串实际存放位置的内存管理,是由系统或Excel本身来处理,是生存期自管理的,是基于引用计数的。就是说如果有两个变量引用同一字符串实际存放地址,那么计数为2,每释放一个变量,引用计数减1,两个都释放了。计数为0,系统会自动释放这块内存区域。 而对于普通类型则不一样,其大小固定,一旦分配,内量内存地址便固定下来了,并且内存地址里存放的就是变量的实际值。对于简单变量的释放,比如Integer类型,就两个字节,也许Excel释放它时只是简单的把它所占的内存区域标识为可用,而没有全部设为0(试想一下,全设成0的时间也许比设一个标识所共时间更多) 所以,卸载窗体时,String类型变量,指针被设成0,而Integer类型变量,只是在内窗体对象的某个地方做了个标识,标识窗体已经释放,内存可以被再次使用。而Integer变量只是这块内存区域中的一部分。 [/td][/tr][/table] 请看下面的具体举证实例: |
2楼 YESS95 |
谢谢指点 |