【发布时间】:2014-03-30 19:44:57
【问题描述】:
我有一个关于数组和链表的概念性问题。
数组是一块连续的内存。
假设一个系统有 1024 个内存单元。 512 个单元被占用(系统+其他)。
我们的流程需要 300 个单位。
在内存中有 512 个可用单元时,最大连续块是 200 个单元。所以可能有 1 个 200 个单元的块,3 个 100 个单元。
- Java 等语言中的数组分配会发生什么情况。在 C 中,malloc 应该会失败?
如果底层数据结构是链表,它应该能够轻松处理不连续的性质(我在这个假设中是否正确)?
操作系统会“碎片整理”内存或其他类似的东西吗?
内存是指内存。不是硬盘。
【问题讨论】:
-
这取决于你所说的“记忆”是什么意思。如果是碎片化的物理内存,操作系统提供的虚拟内存系统应该隐藏它。
-
我想我的意思是,物理内存。虚拟内存也基于磁盘进行抽象。所以要理解它,我想知道会发生什么。它是否会将内存内容写入磁盘并再次加载它们,但会创建一个 300 个单元的连续块?
-
操作系统永远不会对内存进行碎片整理。它支持虚拟内存,永远不必担心此类问题..
标签: java arrays memory memory-management linked-list