首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放/释放和清除内存中的全局/公共变量- Excel

问释放/释放和清除内存中的全局/公共变量- Excel
EN

Stack Overflow用户
提问于 2020-10-19 12:06:59
回答 1查看 599关注 0票数 0

我确实谨慎地使用了全局/公共变量,并且只有当它在许多方面都有足够的回报时才会使用。

据我所知,当一个变量被声明时,计算机就会为它预留一个特定的内存空间供以后使用。

如果我做对了,一个变量被声明为在一个特定的过程中有一个作用域,当这个过程结束的时候,这个变量的寿命也是如此。换句话说,分配给该变量的内存空间将被释放/释放。

回答我的主要问题:

  1. 是否有方法释放/释放在声明全局(公共)变量时分配给它的内存空间?

一些研究,思考和子问题:

( a)我做了一些谷歌搜索,并看到人们建议在代码中的期望位置放置一个“End语句”。这真的释放/释放分配给全局/公开声明变量的内存空间吗?或者这仅仅是“清除”或“重置”变量,使其根本不带赋值或对象(换句话说,在声明变量时分配给变量的内存空间仍然分配给它)?

( b)我还看到人们设置了一个全局/公开声明的变量,等于零或空。但这里也有同样的问题。这真的释放/释放分配给全局/公开声明变量的内存空间吗?或者这仅仅是“清除”或“重置”变量,使其根本不带赋值或对象(换句话说,在声明变量时分配给变量的内存空间仍然分配给它)?

( c)“删除”或“杀死”是全局(公共)变量释放还是释放声明时分配给该变量的内存空间?或者这仅仅是“清除”或“重置”变量,使其根本不带赋值或对象(换句话说,在声明变量时分配给变量的内存空间仍然分配给它)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-19 13:03:36

VB6/VBA uses deterministic approach来销毁对象。每个对象存储对自身的引用数。当该数字达到零时,该对象将被销毁。

销毁对象的方法是确保没有对象变量引用它。

如果一个对象仅由一个全局变量引用,则将该变量设置为Nothing.将清除变量的内容(不再指向对象),并销毁该对象,释放其内存。如果该对象也被其他变量引用,则将全局变量设置为Nothing只会清除变量的内容(不再指向对象),但对象将一直保持到将所有其他引用设置为

  • 为止。

对象变量本身占用指针的大小(LongPtr,4或8个字节)。通过将该变量设置为Nothing,您可以用零填充这4或8个字节,但您不会阻止变量占用这4或8个字节--您也不能。

类似地,对于非对象变量,将它们设置为任何变量都只会更改它们占用的固定字节数量的内容,而不会删除这些字节。

唯一的例外是动态大小的数组,您可以Erase并回收分配给数组的内存(但是指针大小的数组变量仍将保持不变,并且不会指向任何数组,也就是说,它的所有4或8个字节都将填充0)。

重申一下,在任何情况下,您都不能收回分配给变量本身的空间。只有当您退出声明它们的作用域时才会发生这种情况--如果是全局变量,则是程序终止时。您只能回收变量指向的事物所占用的空间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64427017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档