原始数组期望整数作为索引
Does primitive array expects integer as index
应该通过int访问原始数组内容以获得最佳性能吗?下面是一个例子
int[] arr = new arr[]{1,2,3,4,5};
数组的长度只有5个元素,所以索引不必是int,但短或字节,这将节省无用的3字节内存分配,如果使用字节而不是int。当然,如果我知道数组不会溢出大小为255就好了。
byte index = 1;
int value = arr[index];
但是这真的像听起来那么好吗?
我担心的是如何在较低的级别执行,是否index被强制转换为int或其他操作,这实际上会减慢整个过程,而不是优化它。
在C和c++中,arr[index]在形式上等价于*(arr + index)。你对类型转换的关注可以用一个更简单的问题来回答:当机器需要给指针添加一个整数偏移量时,它会怎么做?
我认为可以肯定地说,在大多数现代机器上,当你向指针添加一个"字节"时,它将使用与向指针添加一个32位整数相同的指令。实际上,它仍然会用机器字长来表示那个字节,填充一些未使用的空间。所以这不会使使用数组更快
如果你需要在一个表中存储数百万个这样的索引,那么你的优化可能会有所不同,然后使用byte而不是int将使用4倍的内存,并且花费更少的时间来移动内存。如果要索引的数组非常大,并且索引需要大于机器字端,那么这是另一种考虑。但我认为可以肯定地说,在大多数正常情况下,这种优化并没有真正意义,size_t可能是最合适的泛型类型,对于所有条件相等的数组索引(因为在大多数体系结构中,它完全对应于机器字长)。
将index强制转换为int或其他操作,这实际上会减慢整个过程,而不是优化它
没有,但
将节省无用的3字节内存分配
节省3个字节没有任何好处。
只有当你存储一个巨大的索引数组时,你所节省的空间量可能会使它成为值得的投资。
否则坚持使用普通的int
,它是处理器的本机字长,因此是最快的。
- 跟随整数索引列表的自定义类迭代器
- 如果索引不是整数,我们如何在 C++ 中插入哈希表
- 如何更好地表示 6 个整数键而不是作为 6 维数组的索引?
- 如何使用递归函数返回数组中整数的索引?
- 我无法显示包含整数最大值的索引. 但我可以显示数组中整数的最高值
- 通过字符串的字符对整数数组进行索引
- 可以使用整数索引访问向量元素吗?
- 数组索引在地图上不是整数
- Char阵列中的特定索引的C 拉动签名整数
- 如何将整数存储在字符数组的单个索引中
- 阵列索引(转换为整数)用范围枚举
- SDL_JoystickName C++ 中的整数索引
- 将多个整数添加到一个向量索引? 'Cout'不起作用
- 在C++中为整数指针编制索引
- C++ 中 15000 数组索引之后的不相关整数标准输入
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 如何使用模板创建排序映射整数索引
- 数组索引的类型:有符号/无符号整数先锋
- C++从迭代器中获取整数形式的索引值
- 检查无符号整数是否没有索引的最佳实践