求vb6构造体的大小

求vb6结构体的大小
本帖最后由 bcrun 于 2012-12-21 11:03:22 编辑
精确求结构体内存大小。
VC用的是sizeof可以准确求出来,VB中用Len 求出来数值不准确。
Option Explicit
Private Type i

  a As Integer
  aa(0 To 4) As Byte
  b As Integer
  c As Long
  d As Byte
  e As Integer
  f As Long
End Type
Private Sub Command1_Click()
  Dim test As i
  
  test.a = 1
  
  test.b = 2
  test.c = 3
  test.d = 10
  test.e = 12
  test.e = 12
  
  MsgBox Len(test)
  
  MsgBox VarPtr(test.a) & ":" & VarPtr(test.b) & ":" & VarPtr(test.c) & ":" & VarPtr(test.d) & ":" & VarPtr(test.e) & ":" & VarPtr(test.f)
End Sub


根据字节对齐原理,结构体占用内存大小应该是24,但VB中用Len,却只求出20,不准确。

------解决方案--------------------
本帖最后由 bcrun 于 2012-12-21 11:04:28 编辑
肯定是24字节,VB对于相邻的数据字节数合并为4个倍数

Private Type i
  a As Integer '2个字节,VB会扩展为4字节,废弃2个字节
  aa(0 To 4) As Byte '和下面b合8个字节
  b As Integer' 

  c As Long '4
  d As Byte '和e合4个字节
  e As Integer 
  f As Long '4
End Type


------解决方案--------------------
引用:
用LenB就可以了,LenB得出是24字节,而Len是20字节,呵呵。

Len求出来的是字符,LenB求出来的是字节。你自己看着办吧~
------解决方案--------------------
Len求出来的是字符,LenB求出来的是字节。
------解决方案--------------------
求vb6构造体的大小
------解决方案--------------------
本帖最后由 bcrun 于 2012-12-21 11:04:56 编辑
这样就是20了:
Private Type i
  a As Integer
  aa(0 To 4) As Byte
  d As Byte
  b As Integer
  e As Integer
  c As Long
  f As Long
End Type

------解决方案--------------------
内存对齐是什么啊
------解决方案--------------------
Len 函数
      

返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。

语法

Len(string 
------解决方案--------------------
 varname)

Len 函数的语法有下面这些部分:

部分 说明 
string 任何有效的字符串表达式。如果 string 包含 Null,会返回 Null。 
Varname 任何有效的变量名称。如果 varname 包含 Null,会返回 Null。如果 varname 是 Variant,Len 会视其为 String 并且总是返回其包含的字符数。 


说明

两个可能的参数必须有其一(而且只能有其一)。如为用户定义类型,Len 会返回其写至文件的大小。