地址分布究竟是什么样的?
意地址为16进制,可以看出二维数组地址是连续一条线的。 一些录友可能看不懂内存地址,我就简单介绍一下, 0x7ffee4065820 与 0x7ffee4065824 差了一个4,就是4个字节,因为这是一个int型的数组,所以两个相信数组元素地址差4个字节。 0x7ffee4065828 与 0x7ffee406582c 也是差了4个字节,在16进制里8 + 4 = c,c就是12。看出在C++中二维数组在地址空间上是连续的。 像Java,Python是没有指针的,同时也不对程序员暴漏其元素的地址,寻址操作完全交给虚拟机。 所以看不到每个元素的地址情况,这里我以Java为例,也做一个实里的数值也是16进制,这不是真正的地址,而是经过处理过后的数值了,我们也可以看出,二维数组的每一行头结点的地址是没有规则的,更谈不上连续。 所以Java的二维数组可能是如下排列的方式:不同编程语言的数据结构在地址中的分布方式是不一样的,C++中我们是可以直接获取元素的地址,通过实验,我们也证实了二维数组的元素确实是相邻的。 在其他语言中,并没有指针,也获取不到每个元素的地址,以Java为例,通过实验可以推测可能Java里的二维数组是不相邻的。 这里算是对之前讲解数组内容的一个纠正,也是给大家做一个科普。 大家可以发现C++赋给程序员足够的自由,这也是C++的魅力所在。 但有的时候太自由了往往不是好事,编程语言都是各有各的优点,也不是哪门语言难,它就一定好!
好了,希望通过本篇大家可以二维数组的内存分布有个初步的认识了。 (编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |