我确实谨慎地使用了全局/公共变量,并且只有当它在许多方面都有足够的回报时才会使用。
据我所知,当一个变量被声明时,计算机就会为它预留一个特定的内存空间供以后使用。
如果我做对了,一个变量被声明为在一个特定的过程中有一个作用域,当这个过程结束的时候,这个变量的寿命也是如此。换句话说,分配给该变量的内存空间将被释放/释放。
回答我的主要问题:
一些研究,思考和子问题:
( a)我做了一些谷歌搜索,并看到人们建议在代码中的期望位置放置一个“End语句”。这真的释放/释放分配给全局/公开声明变量的内存空间吗?或者这仅仅是“清除”或“重置”变量,使其根本不带赋值或对象(换句话说,在声明变量时分配给变量的内存空间仍然分配给它)?
( b)我还看到人们设置了一个全局/公开声明的变量,等于零或空。但这里也有同样的问题。这真的释放/释放分配给全局/公开声明变量的内存空间吗?或者这仅仅是“清除”或“重置”变量,使其根本不带赋值或对象(换句话说,在声明变量时分配给变量的内存空间仍然分配给它)?
( c)“删除”或“杀死”是全局(公共)变量释放还是释放声明时分配给该变量的内存空间?或者这仅仅是“清除”或“重置”变量,使其根本不带赋值或对象(换句话说,在声明变量时分配给变量的内存空间仍然分配给它)?
发布于 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)。
重申一下,在任何情况下,您都不能收回分配给变量本身的空间。只有当您退出声明它们的作用域时才会发生这种情况--如果是全局变量,则是程序终止时。您只能回收变量指向的事物所占用的空间。
https://stackoverflow.com/questions/64427017
复制相似问题