查看: 452  |  回复: 0
  VB6 VB/VBA中内存分配是个什么东东,还要释放,NO,不需要!
楼主
发表于 2024年3月21日 22:02

1、在某乎上有人问这样的问题,觉得可以结合VB/VBA来闲聊几句。

若是你会怎么回答呢?要不要帮他呢?如何说服他呢?这样的问题争议的空间并不大,不至于引战造流,兴许就是没搞明白呢。如果要说用户可分配内存就是这样规定的,不然会有内存泄漏。笔者想,这样不仅空洞,还会引入另一个复杂的问题,对理解为什么也并不深刻。所以,就举个生活上的现象,来回答这个问题。

new内存好比内急上厕所占坑位,如果坑够多,你想在里面赖多久都,没有人来敲门问『好了没有』。但实际情况却是,厕所的坑位有限,你老是蹲里面不让别人拉,外面的人就很着急,就会有人来敲门催你。遇到暴脾气的,说不定还会把人从里面揪出来。所以delete就是拉完事了,把门儿给敞开,告诉想来拉的人,这儿有空位!

简单归纳一下就是:上公共厕所,见过完事后继续逗留的人吗?delete就是new完后,自己擦屁股走人!

2、相信用过VB/VBA的人,就从来不会遇到过这样的问题。笔者甚至在以往的分享中,还劝大家放弃声明变量后主动释放内存的陋习,比如Set Obj=Nothing,Erase Array等。因为VB/VBA内部有一套类似于垃圾回收的机制,也就是说VB/VBA可以拉完不管,有人擦屁股。至于说内存泄漏,基本上是没有的事。

3、再来说VB/VBA中的内存分配,要调用*Alloc*一类的函数吗?NO,NO,NO,VB/VBA中完全不需要,甚至连内存分配的概念都不需要,仅需声明变量就可以了。变量的内存总开辟在栈上,编译器在履调约之时,顺便就完成了内存的清理。

笔者将VB/VBA的变量重分类为数值和指针类型。数值类型,直接使用栈内存,故而高效。而指针类型除了使用栈内存外,其数据还会使用堆内存。否则,那么小的栈,怎么可能够用呢?

还记得笔者之前分享的关于"="的文章么?在VB/VBA中,基本上靠这个符号就可以分配和操作指针类型的数据内存了。当用户使用"="将数据赋值到相应变量时,堆内存分配行为就随之发生了。

VB/VBA中,巧妙地隐藏了内存分配和释放的细节,孰不知在那些很多人认为很丑陋的语法背后,甚至不需要内存相关的概念,就可以上演他们口中的高级货。所以,别拿VB/VBA的专业性说事,还是那句老话,凡是说VB/VBA不够专业的,都不如她专业!

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com