ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 为何窗体中PUBLIC变量在卸载后会依变量类型的不同而显示出不同的值变化?

为何窗体中PUBLIC变量在卸载后会依变量类型的不同而显示出不同的值变化?

作者:绿色风 分类: 时间:2022-08-18 浏览:131
楼主
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
谢谢指点

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap