根据我的理解,当我创建一个静态数组时,比如int[] array = new int[N];
,运行时实际上会查找N * 4字节的内存,其地址也是连续的。正确?
那么如果运行时间找不到连续的内存地址怎么办?
例如,如果我的内存是128MB,并且在我的应用程序N = 25M,这意味着我的阵列需要100MB内存。这种阵列创建是否有可能失败?有可能,因为内存碎片太多,无法找到需要的100MB内存吗?感谢
答案 0 :(得分:1)
是的,它可能会失败。在这种情况下,将抛出OutOfMemoryException
。测试这个的简单方法如下:
int[] array = new int[int.MaxValue];
(这假定C#,Java中的行为类似)
答案 1 :(得分:0)
如果我们正在谈论C ++(但通常是相同的),则数组是连续的,这意味着存储器具有连续的地址,即它在虚拟地址空间中是连续的。它不需要在物理地址空间中是连续的(程序员永远不会看到数组元素的实际地址,只是对数组的引用和索引它的方法)。
无论如何,如果没有可用内存,你将获得一个例外(这不是一个连续的事情)