前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机原理:数组下标为什么从0开始

计算机原理:数组下标为什么从0开始

作者头像
潇洒
发布2023-10-20 10:15:13
1550
发布2023-10-20 10:15:13
举报
文章被收录于专栏:石头岛

为了记数方便

注意这个红色的0,这里是从零开始。 内存地址是从0开始,如果内存上装载一个数据如int类型。 一个int类型是4个字节,那么假设一个int的 data_type_size=4。 那么数据的内存是连续的,那初始化5个数组就是: int[] a = new int[5],到这都很清楚吧。

base_address = 1000

那么假设首地址从1000开始,连边开5个内存地址就是:int[5] 公式

a[i]_address = base_address + i * data_type_size

那么来推一下: 下标:i=0 数组[0]:

a[0]_address = base_address + 0 * data_type_size

下标:i=1 数组[1]:

a[1]_address = base_address + 1 * data_type_size

最络结果是这样

i=0 { a[0] } 1000-1003 i=1 { a[1] } 1004-1007 i=2 { a[2] } 1008-1011 i=3 { a[3] } 1012-1016 i=4 { a[4] } 1016-1020

这有啥,不就是常规操作嘛,下面换个角度看。

减少CPU指令运算

如果下标从1开始,base_address 这种内存地址还是从 1000 开始 下标:i=1 数组[1]:

a[i]_address = base_address + (i-1) * data_type_size

那就是

a[1]_address = 1000 + (i-1) * 4

有什么不一样吗? 不一样的地方就是多了一步i-1 的操作,-1 这个操作需要CPU额外多计算一次,这不就是费了一丝性能嘛。 在那个登月火箭的计算性能只有一个电子表的时代理,这一丢丢的性能损耗放大到一个工程里可是不小的损耗。 而且做为系统级别的设计,更是需要把性能压榨到最优。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为了记数方便
  • 减少CPU指令运算
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档