谁能讲一下VB对内存的使用问题
我想知道VB中的内存是如何使用的,执行DimaAsInteger后,内存中发生了哪些变化,执行DimaAsInteger:a=1后系统又发生了哪些变化执行Dimrstas...
我想知道VB中的内存是如何使用的,
执行Dim a As Integer后,内存中发生了哪些变化,
执行Dim a As Integer:a=1后系统又发生了哪些变化
执行Dim rst as ADOB.Recordset后,内存中发生了哪些变化
执行Dim rst as New ADOB.Recordset后,内存中又发生了哪些变化 展开
执行Dim a As Integer后,内存中发生了哪些变化,
执行Dim a As Integer:a=1后系统又发生了哪些变化
执行Dim rst as ADOB.Recordset后,内存中发生了哪些变化
执行Dim rst as New ADOB.Recordset后,内存中又发生了哪些变化 展开
1个回答
展开全部
总的来说,内存少了。
Dim a as integer,内存少了几个字节,这几个字节被划分给a这个变量及相关的内存管理指针;
Dim a as integer:a=1,内存少了几个字节,并且至少有2个字节被更新为00 01(16进制)
Dim rst as ADOB.Recordset后,如果不弹出错误提示的话,内存会少很多字节,具体不太好统计,因为ADODB有很多版本,例如这个ADOB;此时内存也只是给变量rst划分区域和相关指针;
Dim rst as New ADOB.Recordset,在上一条动作的基础上,在这块内存里赋上初始值,实际上是运行了ADOB的代码。可以理解成:没有new的rst是个空壳,除了占有一个空间其它什么都没有,有new的就是一个实体,或者产生了一个‘活体’,在new执行过后就被激活了,当然你也可以用Set把它装到其它对象的‘壳’中,只要他们在Dim时声明时的类型是一样的。
Dim a as integer,内存少了几个字节,这几个字节被划分给a这个变量及相关的内存管理指针;
Dim a as integer:a=1,内存少了几个字节,并且至少有2个字节被更新为00 01(16进制)
Dim rst as ADOB.Recordset后,如果不弹出错误提示的话,内存会少很多字节,具体不太好统计,因为ADODB有很多版本,例如这个ADOB;此时内存也只是给变量rst划分区域和相关指针;
Dim rst as New ADOB.Recordset,在上一条动作的基础上,在这块内存里赋上初始值,实际上是运行了ADOB的代码。可以理解成:没有new的rst是个空壳,除了占有一个空间其它什么都没有,有new的就是一个实体,或者产生了一个‘活体’,在new执行过后就被激活了,当然你也可以用Set把它装到其它对象的‘壳’中,只要他们在Dim时声明时的类型是一样的。
追问
Dim a as integer,内存少了几个字节,你说是少了比2字节还多的内存吗,为什么
还有rst作为空壳和作为实体占用的内存大小一样吗
再追问一个,Dim a[5] as Integer:a[0]=6,这句话中的6在另外一个内存单元,只是他的地址在a内存单元中对吗?而Dim a as integer:a=6则是把6直接存到了a所在内存单元中,对吗?
追答
1、具体是几字节,需要用工具软件测试,MSDN说的也未必在各种情况下都准确;
2、rst作为空壳,与实体相比,是最小的空间,实体由于有代码在执行,占用的实际空间可能比这个rst空壳还要大;
3、我认为不对,Dim a[5] as integer:a[0]=6,这句话中的6就在a[0]的单元中,并不在内存的其它单元中存在;Dim a as integer:a=6 也是一样,6就在a的单元中。在VB中,您不必考虑一个变量在内存中存在的具体位置,不必像C那样考虑指针问题,例如你可以先声明一个dim a[5],并赋值a[0]=6,然后再声明一个dim b[10],接着再改变a的数组下标:redim preserve a[20]。。。这样会导致a数组在内存中是不连续的,但你不必去考虑这些,直接使用a[1]~a[20]就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询