arrays - 数组通常在较低级别上如何工作?

标签 arrays low-level

他们如何将索引直接映射到值,而不必遍历索引?
如果很复杂,我可以在哪里阅读更多内容?

最佳答案

本质上,计算机内存可以描述为一系列寻址的插槽。要制作一个数组,您需要留出一个连续的块。因此,如果阵列中需要五十个插槽,则可以从内存中预留50个插槽。在此示例中,假设您为名为A的阵列预留了从1019到1068的插槽。A中的插槽0是内存中的插槽1019。 A中的插槽1是内存中的插槽1020。 A中的插槽2是内存中的插槽1021,依此类推。因此,一般而言,要获得阵列中的第n个插槽,我们只需执行1019 + n。因此,我们要做的就是记住起始插槽是什么,并适本地添加它。

如果我们要确保不写超出数组末尾的内存,我们可能还想存储A的长度并对照它检查n。在这种情况下,并非所有我们希望跟踪的值都具有相同的大小,因此我们可能有一个数组,其中数组中的每个项目都占用一个以上的插槽。在这种情况下,如果s是每个项目的大小,那么我们需要将s乘以数组中项目的数量,当我们获取第n个项目时,我们需要将s时间n添加到开始处,而不仅仅是n 。但是实际上,这很容易处理。唯一的限制是数组中的每个项目都必须具有相同的大小。

关于arrays - 数组通常在较低级别上如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461457/

相关文章:

performance - 故障硬件 : How "smart" is it?

javascript - 获取数组中值的总和

java - 如何使用递归方法找出数组中的奇数?

ios - += 和 append 将单个项目添加到数组的区别?

javascript - 如何在 lodash 中查找 A 中的所有元素而不是 B 中的所有元素?

c - C 中的类型转换是怎么回事?

c - 可以向文件写入少于 1 个字节

wifi上的蓝牙协议(protocol)?

c - 为什么所有底层的东西都是用 C 写的?

jquery - 在Jquery中以交替顺序合并两个数组