⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b971221.gb_

📁 ASPWeb数据库范例总览
💻 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 + -