求vb6构造体的大小
求vb6结构体的大小
精确求结构体内存大小。
VC用的是sizeof可以准确求出来,VB中用Len 求出来数值不准确。
根据字节对齐原理,结构体占用内存大小应该是24,但VB中用Len,却只求出20,不准确。
------解决方案--------------------
肯定是24字节,VB对于相邻的数据字节数合并为4个倍数
------解决方案--------------------
Len求出来的是字符,LenB求出来的是字节。你自己看着办吧~
------解决方案--------------------
Len求出来的是字符,LenB求出来的是字节。
------解决方案--------------------

------解决方案--------------------
这样就是20了:
------解决方案--------------------
内存对齐是什么啊
------解决方案--------------------
Len 函数
返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。
语法
Len(string
------解决方案--------------------
varname)
Len 函数的语法有下面这些部分:
部分 说明
string 任何有效的字符串表达式。如果 string 包含 Null,会返回 Null。
Varname 任何有效的变量名称。如果 varname 包含 Null,会返回 Null。如果 varname 是 Variant,Len 会视其为 String 并且总是返回其包含的字符数。
说明
两个可能的参数必须有其一(而且只能有其一)。如为用户定义类型,Len 会返回其写至文件的大小。
精确求结构体内存大小。
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,不准确。
------解决方案--------------------
肯定是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
------解决方案--------------------
Len求出来的是字符,LenB求出来的是字节。你自己看着办吧~
------解决方案--------------------
Len求出来的是字符,LenB求出来的是字节。
------解决方案--------------------
------解决方案--------------------
这样就是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 会返回其写至文件的大小。