偶尔我会将某个系统的状态存储为整数。我经常发现自己使用这些状态的小值(比如1-10),因为系统相对简单。
一般来说,存储小正整数的变量的最佳声明是什么 - 其中 best 被定义为最快的读/写时间&最小的内存消耗? Small 在这里被定义为1-10,尽管整数存储方法及其范围的完整列表将是有用的。
最初我使用Integer
就像它一样,它使用更少的内存。但我已经知道情况并非如此,因为它被默默地转换为Long
我出于上述原因使用了Long
,并且知道它使用的内存少于Double
我已经发现Byte
并切换到那个,因为它存储了较小的整数(0-255或256,我永远不记得哪个),并且我想从它的分钟名称中使用更少的内存。但我真的不相信VBA,并想知道这里是否有任何内部类型转换。
Boolean
我认为只有0或1,但我读过任何非零数字转换为True,这是否意味着它还可以存储数字?
答案 0 :(得分:4)
最初我使用Integer作为它的表面,它使用更少的内存。但我已经知道情况并非如此,因为它被默默地转换为Long
由于转换,使用p-column
优于Integer
没有任何优势,但在与旧的16位API通信时可能需要Long
。
另请阅读"Why Use Integer Instead of Long?"
我出于上述原因使用了
Integer
,并且知道它使用的内存少于Long
您不会在Double
或Long
之间做出决定,因为使用的内存较少。你决定他们之间是因为......
Double
)Double
)在这种特定情况下决定内存使用情况只是一个非常糟糕的主意,因为这些类型根本不同。
我已经发现Byte并切换到那个,因为它存储了较小的整数(0-255或256,我永远不记得哪个),我猜它使用较少的内存来自它的分钟名称。但我并不真正信任VBA,并想知道这里是否有任何内部类型转换。
我没有看到您使用Office / Excel的任何情况,并使用Long
代替Long
从1到10进行迭代,从而遇到任何内存问题。如果您需要限制它到255(一些旧的API,无论如何),然后你可以使用Byte
。如果没有必要,我会使用Byte
只是为了灵活而不会遇到任何编码问题,因为您需要记住哪些计数器只有Long
,哪些是Byte
。<登记/>
例如。如果我使用Long
进行迭代,我会期望i
。我认为在这种情况下使用Long
没有任何好处。
尽可能保持简单。不要只做因为你能做到的奇怪事情。避免未来的编码问题值得超过一(或三)个字节的内存使用量。有时候编写好的人类可读和可维护代码比编写更快的代码更有价值,特别是如果你不能注意到这些差异(在这种情况下你真的可以做到)。糟糕的可读代码迟早会导致错误或漏洞。
布尔我认为只有0或1,但我读过任何非零数字都转换为True,这是否意味着它还可以存储数字?
没错。 Byte
的布尔值为-1
,True
的布尔值为0
。但请注意,如果你施放,例如False
进入Long
不 Boolean
然后它会自动投射并生成0
。
但VBA中的True
明确定义为:
Boolean
答案 1 :(得分:3)
可以寻址的最小内存块是一个字节(8位)。
我无法保证在所有情况下都将VBA字节存储为字节,但使用此类型是最安全的。
顺便说一句,最大字节值是11111111b,即255d。值256d是100000000b,需要9位。
另请注意,在每个可能的时间使用字节可能是徒劳的,因为如果需要进行数字转换,它可能会在运行时间方面产生成本,而备用内存空间可能无关紧要。
除了非常特殊的应用之外,这种微优化是没有用的。