smw*_*dia 5 c++ architecture operating-system
由于我已经学习了数据结构,我知道除了Stack和Heap之外还有很多其他的数据结构,为什么现在的进程只包含这两个范例作为其地址空间中的"标准设备"?是否有任何全新的内存使用范例?
谢谢你的回复.是的,我意识到我的陈述有问题.堆数据结构与进程的地址空间中的堆不同.但我想知道的是除了proecss地址空间中的堆栈区域和堆区域之外,还有什么新的范例可以使用内存吗?似乎其他内存使用方式建立在这两个基本范例之上.这两种范式是一些元范式吗?
让我们想一下。我们有两个基本的存储规则。连续的和碎片的。
连续的。
堆栈受顺序限制。后进先出。函数调用的嵌套上下文需要这样做。
我们可以轻松地反转此模式来定义Queue。先入先出。
我们可以向队列添加一个绑定来创建一个循环队列。输入输出处理需要这个。
我们可以将这两个约束合并到Dequeue中。
我们可以向队列添加键和排序来创建优先级队列。操作系统调度程序要求这样做。
所以。这是受入场顺序限制的连续结构的一系列变化。这些有多种实现。
您可以拥有不受条目顺序约束的连续存储:Array和Hash。数组是通过“位置”来索引的,哈希是通过Key的哈希函数来索引的。
碎片化:
裸露的“堆”是没有任何关系的碎片存储。这是通常的方法。
您可以使用句柄来进行堆存储以允许重新定位。旧的 Mac 操作系统曾经这样做过。
您可以拥有带有关系的碎片存储——列表和树等。
链接列表。单链表和双链表是实现选择。
二叉树有 0、1 或 2 个子节点。
高阶树。 尝试之类的。
我们在做什么?十几个?
您还可以将其视为“集合”,无论存储如何,它都存在。在这种情况下,您可以混合存储规则(堆或数组)
Bags:无序的集合,允许重复。您可以拥有一个基于多种存储规则构建的包:LinkedBag、TreeBag、ArrayBag、HashBag。链接和树使用碎片存储,数组和散列使用连续存储。
集合:无重复的无序集合。没有索引。再次:LinkedSet、TreeSet、ArraySet、HashSet。
列表:有序集合。按位置索引。再次:LinkedList、TreeList、ArrayList、HashList。
映射:键值关联集合。按键索引。LinkedMap、TreeMap、ArrayMap、HashMap。