在创建大小为N的数组时,初始化是否可能失败

时间:2012-02-20 17:27:14

标签: arrays data-structures memory-management

根据我的理解,当我创建一个静态数组时,比如int[] array = new int[N];,运行时实际上会查找N * 4字节的内存,其地址也是连续的。正确?

那么如果运行时间找不到连续的内存地址怎么办?

例如,如果我的内存是128MB,并且在我的应用程序N = 25M,这意味着我的阵列需要100MB内存。这种阵列创建是否有可能失败?有可能,因为内存碎片太多,无法找到需要的100MB内存吗?

感谢

2 个答案:

答案 0 :(得分:1)

是的,它可能会失败。在这种情况下,将抛出OutOfMemoryException。测试这个的简单方法如下:

int[] array = new int[int.MaxValue];

(这假定C#,Java中的行为类似)

答案 1 :(得分:0)

如果我们正在谈论C ++(但通常是相同的),则数组是连续的,这意味着存储器具有连续的地址,即它在虚拟地址空间中是连续的。它不需要在物理地址空间中是连续的(程序员永远不会看到数组元素的实际地址,只是对数组的引用和索引它的方法)。

无论如何,如果没有可用内存,你将获得一个例外(这不是一个连续的事情)