📄 b971221.gb_
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>进阶篇:自订型别的资料长度到底是多长?</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (Win95; I) [Netscape]">
<META NAME="Author" CONTENT="KJ Wang">
</HEAD>
<BODY TEXT="#202020" BGCOLOR="#FFFFFF" LINK="#FF0000" VLINK="#000080" ALINK="#FF0000">
<H2 ALIGN=CENTER><A HREF="vbex.htm">VB5 实战讲座</A></H2>
<H3 ALIGN=CENTER><A HREF="../vbweeks.htm">每周一问</A>: 挑战您的 VB 功力 (进阶篇, 97/12/21)</H3>
<H2>
<HR WIDTH="100%"></H2>
<TABLE WIDTH="100%" >
<TR VALIGN=TOP>
<TD NOWRAP>Q:</TD>
<TD>有一资料结构及变数 X, 定义如下,问 <FONT COLOR="#FF0000">Len</FONT>(X)=?
<FONT COLOR="#FF0000">LenB</FONT>(X)=?
<PRE><FONT SIZE=+1>Type StructX
A As Byte
B As Long
End Type
Dim X As StructX</FONT></PRE>
</TD>
</TR>
<TR VALIGN=TOP>
<TD>A:</TD>
<TD>在以上的 StructX 资料结构中, Byte 的长度等於 1 个位元组, Long 的长度等於
4 个位元组, 所以利用 StructX 所定义出来的 X 其资料之长度应该等於 5, 照此推论,
Len(X) 及 LenB(X) 都应该等於 5, 但实际上, 答案是却 Len(X) = 5, <FONT COLOR="#FF0000">LenB(X)
= 8</FONT>, 为什麼會这样呢?
<P>应该这麼说吧, Len 函数在读取<FONT COLOR="#FF0000">资料的长度</FONT>,
所以 Len(X) 等於 5 并没有什麼奇怪的, 而 LenB 函数则在读取<FONT COLOR="#FF0000">资料所占用记忆体之长度</FONT>,
那麼为什麼 LenB(X) 等於 8 呢? 对於 32-bits 的作业系统而言, 每次存取 32-bits(等於
4 bytes) 其执行效能是最高的, 所以在记忆体的安排上, 也尽可能以 4 bytes
为一单元, 以 StructX 为例, A 占用 1 Bytes, 接下来剩馀 3 Bytes, 但不足於容纳
B, 因此 Windows 便舍弃此 3 Bytes 不用,而将 B 放在下一个 4 Bytes 的位置,
而出现以下的结果:</P>
<CENTER><P><IMG SRC="B971221.gif" HEIGHT=38 WIDTH=275></P></CENTER>
<P>所以 LenB(X) 便等於 8。</P>
<P>知道 Len(X) = 5 而 LenB(X) = 8 之後, 对於程式的撰写有什麼影响呢? 首先请注意,
虽然 X 占用了 8 Bytes 的记忆体, 如果将 X 写入<FONT COLOR="#FF0000">档案</FONT>中,它所占用的长度还是等於
Len(X)=5。 </P>
<P>由於我们可以正确地知道记忆体的安排, 所以在资料结构的宣告上, 就可以采用比较节省记忆体的方式,
请比较以下两种宣告方式:</P>
<UL>
<PRE><FONT SIZE=+1>Type StructA
X1 As <FONT COLOR="#FF0000">Byte
</FONT> X2 As Long
X3 As <FONT COLOR="#FF0000">Byte
</FONT> X4 As Long
End Type</FONT></PRE>
<PRE><FONT SIZE=+1>Type StructB
X1 As <FONT COLOR="#FF0000">Byte
</FONT> X3 As <FONT COLOR="#FF0000">Byte
</FONT> X2 As Long
X4 As Long
End Type</FONT></PRE>
</UL>
<P>结果 StructA 所占用的记忆体是 16 Bytes, 而 StructB 所占用的记忆体则是
12 Bytes, 因此, 选择 StructB 是比较节省记忆体的方式。 </P>
</TD>
</TR>
</TABLE>
<P>
<HR WIDTH="100%"></P>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -