Byte 型ってメモリの節約になる?
ヘルプを見るまでもなく、
通貨型 (Currency) … 8 バイト 長整数型 (Long) … 4 バイト 整数型 (Integer) … 2 バイト バイト型 (Byte) … 1 バイト
ってのは、VBA をやる人なら頭の中に入っていることかと思います。
ということは、メモリをケチケチ使いたいなら、バイト型を使えばいいような気がしますが本当でしょうか?
実験してみました。
今回のビックリドッキリメカ・・・じゃなくて、コードはコレです。
Sub Test_Currency() Dim wk1 As Currency, wk2 As Currency, wk3 As Currency Debug.Print "## Currency ##" Debug.Print Hex(VarPtr(wk1)) Debug.Print Hex(VarPtr(wk2)) Debug.Print Hex(VarPtr(wk3)) End Sub Sub Test_Long() Dim wk1 As Long, wk2 As Long, wk3 As Long Debug.Print "## Long ##" Debug.Print Hex(VarPtr(wk1)) Debug.Print Hex(VarPtr(wk2)) Debug.Print Hex(VarPtr(wk3)) End Sub Sub Test_Integer() Dim wk1 As Integer, wk2 As Integer, wk3 As Integer Debug.Print "## Integer ##" Debug.Print Hex(VarPtr(wk1)) Debug.Print Hex(VarPtr(wk2)) Debug.Print Hex(VarPtr(wk3)) End Sub Sub Test_Byte() Dim wk1 As Byte, wk2 As Byte, wk3 As Byte Debug.Print "## Byte ##" Debug.Print Hex(VarPtr(wk1)) Debug.Print Hex(VarPtr(wk2)) Debug.Print Hex(VarPtr(wk3)) End Sub
順番に実行してみると、、、
## Currency ## 13F6E4 13F6DC 13F6D4 ## Long ## 13F6E8 13F6E4 13F6E0 ## Integer ## 13F6EA 13F6E8 13F6E6 ## Byte ## 13F6EA 13F6E8 13F6E6
Currency,Long,Integer は冒頭に書いたとおりのメモリが使われていますが、Byte はInteger と同じで 2 バイト使われています。
正確にいうと、1 バイト余分に割り当てられているんですね。
つまり、単に小さい数を使いたくて、メモリを節約したいってだけの理由なら Byte 型を使う意味はないってことです。
ま、もともとByte 型ってのは、そういう用途のための型でもないですからね。
本来の用途で使うときは、配列で利用することが多いと思います。
ついでに、これも確かめておきましょう。
Sub Test_ByteArray() Dim wk(1 To 3) As Byte Debug.Print "## ByteArray ##" Debug.Print Hex(VarPtr(wk(1))) Debug.Print Hex(VarPtr(wk(2))) Debug.Print Hex(VarPtr(wk(3))) End Sub
実行すると、、、
## ByteArray ## 242E90 242E91 242E92
当然ですが、今度はぎゅうぎゅうに割り当てられています。
※.Excel World の 2007年3月12日 01:38 の日記をコピーしています。
http://excel.sns.fc2.com/excel/