原始数组是否需要整数作为索引

Does primitive array expects integer as index

是否应该通过 int 访问原始数组内容以获得最佳性能? 这是一个例子

int[] arr = new arr[]{1,2,3,4,5};

数组的长度只有5个元素,所以索引不必是int,而是short或byte,如果使用byte而不是int,这将节省无用的3字节内存分配。当然,如果只有我知道数组不会溢出 255 的大小。

byte index = 1;
int value = arr[index];

但这真的像听起来那么好用吗?

我担心这是如何在较低级别上执行的,索引是否被强制转换为 int 或其他实际上会减慢整个过程而不是优化它的操作。

does index gets casted to int or other operations which would actually slow down the whole process instead of this optimizing it

没有,但是

that would save useless 3 byte memory allocation

节省 3 个字节不会有任何好处。

只有当您存储这些索引的 巨大 数组时,您节省的 space 数量才可能使它成为一项值得的投资。

否则坚持使用普通 int,这是处理器的本机字长,因此是最快的。

在 C 和 C++ 中,arr[index] 在形式上等同于 *(arr + index)。您对转换的担忧应该可以回答一个更简单的问题,即机器在需要向指针添加整数偏移量时会做什么。

认为 可以肯定地说,在大多数现代机器上,当您向指针添加 "byte" 时,它会使用与如果您向指针添加了一个 32 位整数。事实上,它仍然会使用机器字长来表示该字节,并填充一些未使用的 space。所以这不会使使用数组更快。

如果您需要在 table 中存储数百万个这些索引,那么您的优化可能会有所不同,然后使用 byte 而不是 int 将使用更少的内存 4 倍,并且移动内存所需的时间更少.如果你索引的数组很大,索引需要比机器字边大,那就另当别论了。但我认为可以肯定地说,在大多数正常情况下,这种优化并没有真正意义,并且 size_t 可能是数组索引最合适的泛型类型,所有条件都相等(因为它完全对应于机器字大小,在大多数架构上)。