数组存储在哪
Ⅰ 数组存放在什么位置
数组是用于储存多个相同类型数据的集合。
在c语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
一维数组在内存中的存放方式是:
1、硬盘上不可能运行程序的,必须在内存中运行。
2、低地址到高地址存储 。
3、数组元素通常也称为下标变量。
4、在C语言中,只能逐个地使用下标变量, 不能用一个语句输出整个数组。
5、int a[10]和t=a[6]分别是定义数组长度为10和引用a数组中序号为6的元素,6不代表数组长度。
Ⅱ 一维数组的存储地址是什么
(1)数组A的存储量为6*8*6=288字节
(2)按行优先存放时,元素A1,4的起始地址、存储地址:1000+(1*8+4)*6=1072
(3)按列优先存放时,元素A4,7的起始地址、存储地址:1000+(7*6+4)*6=1276
数组元素的存储地址就是该元素在内存的起始地址
Ⅲ 关于数组存储位置
根据你的问题,我给你举例吧,取五行五列数组Array a
A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
C1 C2 C3 C4 C5
D1 D2 D3 D4 D5
E1 E2 E3 E4 E5
a[0][0]的地址就是A1的地址,或许你觉得我说得有点白痴,不过如果你了解了数组的存储方式,这样说算是直白了,各个元素占两个字节,那么a[0][0]的地址就是指针指向第一字节的位置,A1存储的位置是1、2字节,A2是3、4字节,A3是5、6字节,以此类推,那么a[2][3]对应的就是B3,其实二维数组基本都是按行优先存储的,a[2][3]存储的位置就是第15字节的位置,如果每个地址有自己的名字,例如第一字节的名字时a1,第二字节的名字是a2,以此类推,那么a[0][0]的地址就是a1,这道题的结果就是a15
Ⅳ java数组是存储在内存中的什么地方
因为我也不清楚你理解的内存指啥,说我的理解,猜测一下,但愿符合你的理解:
对程序而言,内存分为:
a、静态区块或叫全局区块,指程序加载的时候就分配的固定存储区;
b、栈内存,代码块执行的时候动态分配的内存块,代码运行完后,操作系统或运行平台负责自动回收这部分使用的内存。
c、堆内存块,由操作系统提供api程序自由分配管理的内存块。
java的内存管理机制,我个人认为是黑盒的,写java也很少有人去关心,但是如果看虚拟机的实现源码还是能知道的。(楼主懂c由兴趣自己看)。那么从逆向工程的角度我们可以猜测到:
静态类,静态变量,存储在,静态区块中。
类本身代码需要时再加载到内存中,java的动态代理实现的根本。既然是动态加载肯定是在堆中,不过加载进来的类代码可能永不会销毁(虚拟机运行区间内,可以加快运行平台的处理速度,java属于半编译半解释的一门语言,要解释执行的是预先编译好的指令,就是class类文件)。
我们创建的任何对象,时间是随机的,创建的时候才会分配内存,必然在堆上。虚拟机的垃圾回收机制要管理的刚好是这部分内存。
类中的方法,或静态代码块必定运行在占上,代码运行完,内存立即回收。此处有个例外,不同于c语言或操作系统实现。在方法中返回的任何对象:c需要动态分配存储空间,兵自行管理,或者申明为全局局部静态存储,代码运行完,对象才能保留下来。java可以直接保留下来。说明虚拟机自动给我们申请了动态内存保存对象。此处分配的内存也需要垃圾回收机制管理。没门语言都有原始类型,方法或函数中返回的原始类型不需要从堆上分配内存,直接复制给接收变量,或代码运行的形参所分配的空间中即可。
从操作系统理解,内存分为内核使用的内存与程序使用的内存,java运行在虚拟机上,虚拟机运行在操作系统上,内核内存属于操作系统自用内存,由操作系统负责管理,运用程序不能直接管理分配内核内存。应用程序可管理的是分配给自己的运行空间。因此java使用内存属于应用程序内存。内核内存管理方式windows与unix实现管理方式不一样,最大差别windows的每一个程序,内核需要使用掉一部分地址空间,余下的留给应用程序。如32位系统,总共可以使用的地址空间是4G内核要用掉其中1G或者2G。但是unix实现的系统应用程序可以直接使用4G地址空间。有兴趣请参考操作系统内核相关书籍。
Ⅳ c 语言的数组是如何存储的
C语言的数组是按照连续的内存空间存储的。当你声明一个数组时,编译器会在内存中为该数组分配一块连续的内存空间,这块内存空间的大小由数组的类型和元素个数决定。在数组中,每个元素的地址都是连续的,可以通过下标访问数组中的元素。例如,对于一个整型数组int arr[5],数组中第一个元素的地址是arr[0],第二个元素的地址是arr[1],以此类推。