整数变量存储为 16 位(2 字节)数字
Office VBA 参考
Long(长整数)变量存储为带符号的 32 位(4 字节)数字
Office VBA 参考
因此,好处是减少了内存空间。 Integer 占用的内存是 Long 的一半。现在,我们讨论的是 2 个字节,因此它不会对单个整数产生真正的影响,只有在处理大量整数(例如大型数组)并且内存使用至关重要时才需要考虑。
BUT on a 32位系统中,内存使用量减半是以性能为代价的。当处理器实际使用 16 位整数执行某些计算时(例如,递增循环计数器),该值会默默地转换为临时 Long,而没有使用更大范围的数字的好处。溢出仍然会发生,并且处理器用于存储计算值的寄存器将占用相同数量的内存(32 位)。性能甚至可能是hurt因为必须转换数据类型(在非常低的级别)。
不是我正在寻找的参考,但是......
我的理解是,底层 VB 引擎会将整数转换为 long,即使它声明为整数。因此,可以注意到速度略有下降。我已经相信这一点有一段时间了,也许这也是我发表上述言论的原因,我并没有要求推理。
ozgrid 论坛
这是我一直在寻找的参考。
简短回答,在 32 位系统中,2 字节整数转换为 4 字节
长。确实没有其他方法可以使各个位正确排列
适合任何形式的处理。考虑以下
MsgBox Hex(-1) = Hex(65535) ' = True
显然 -1 不等于 65535 但计算机返回正确的值
回答,即
“FFFF”=“FFFF”
然而,如果我们将 -1 强制为长第一个,我们就会得到正确的结果
答案(大于 32k 的 65535 自动为 long)
MsgBox Hex(-1&) = Hex(65535) ' = False
“FFFFFFFF”=“FFFF”
一般来说,在现代 VBA 中声明“As Integer”是没有意义的
系统,也许除了一些期望接收
整数。
pcreview论坛
终于我找到了msdn文档我真的很认真地在寻找。
传统上,VBA 程序员使用整数来保存小数
数字,因为它们需要更少的内存。在最近的版本中,
但是,VBA 会将所有整数值转换为 Long 类型,即使它们是
声明为 Integer 类型。所以不再有性能优势
使用整数变量;事实上,Long 变量可能会稍微
更快,因为 VBA 不必转换它们。
To clarify based on the comments: Integers still require less memory to store - a large array of integers will need significantly less RAM than a Long array with the same dimensions (almost exactly half as much, which you can check for yourself in Task Manager). But because the processor needs to work with 32 bit chunks of memory, VBA converts Integers to Longs temporarily when it performs calculations
因此,总而言之,几乎没有充分的理由使用Integer
这几天打字。Unless您需要与需要 16 位 int 的旧 API 调用进行互操作,或者您正在使用由小整数组成的大型数组,并且内存非常宝贵。
值得指出的一件事是,一些旧的 API 函数可能需要 16 位(2 字节)整数的参数,并且如果您使用 32 位并尝试传递整数(已经是 4 字节长)通过引用,由于字节长度的差异,它将不起作用。
感谢 Vba4All 指出了这一点。