Memory 使用顺序分配时,两个堆栈如何共享一段内存

Memory 使用顺序分配时,两个堆栈如何共享一段内存,memory,memory-management,data-structures,Memory,Memory Management,Data Structures,这个主题在我的CS数据结构课程中提到过,但我没有放弃。所以想知道是否有人能花点时间向我解释一下,在内存中顺序分配是如何工作的。这将是非常有帮助的图形或一些插图,可以帮助我理解它。 我还想知道这是否会发生在两个队列上 谢谢你硬件调用堆栈总是朝着同一个方向增长,但是你可以有两个软件堆栈从分配的相反端增长。这看起来很简单,也很可爱,所以它可能不是你所说的。我假设这里使用的顺序分配意味着一块没有间隙的内存 一种可能性是,这可能类似于deque双端队列,但这将是一个双端堆栈。例如,你分配一个顺序内存块,它

这个主题在我的CS数据结构课程中提到过,但我没有放弃。所以想知道是否有人能花点时间向我解释一下,在内存中顺序分配是如何工作的。这将是非常有帮助的图形或一些插图,可以帮助我理解它。 我还想知道这是否会发生在两个队列上


谢谢你

硬件调用堆栈总是朝着同一个方向增长,但是你可以有两个软件堆栈从分配的相反端增长。这看起来很简单,也很可爱,所以它可能不是你所说的。

我假设这里使用的顺序分配意味着一块没有间隙的内存

一种可能性是,这可能类似于deque双端队列,但这将是一个双端堆栈。例如,你分配一个顺序内存块,它有足够的内存容纳N个元素,你会有一个指向第一个堆栈顶部的指针,它从第一个元素开始,然后向右增长。您还将有一个指向第二个堆栈顶部的指针,它将从最后一个元素开始向左增长。如果两个顶端互相交叉,是时候增加记忆了;重新分配并将一个或两个堆栈复制到新位置。因此,每个堆栈都可以增长,直到它们的大小加起来超过N

插图来自一页,讨论如何使用数据结构作为分配器:


关于队列,可以从该块中创建两个队列,但它可能会有一个额外的孔/间隙,因为队列的底部可能会从末端向上移动。一个可能的解决方案是,不必弹出前端,而可以清空前端元素,并与后端交换,同时保留指向实际前端和后端的指针。

你是对的,如果它是软件堆栈而不是实际内存堆栈,听起来是合理的。