链接列表的最大限制

我在CS世界是新的。在阅读一些书籍时,我检查了内存的动态分配,在程序运行时动态地分配内存,并将内存称为堆栈。这意味着每当我想在Linkedlist中创建一个新节点时,它都会存储在堆中? 否则它会被存储在内存中并访问运行时?

而且我也检查过,无论何时运行任何程序,操作系统都会创建相同的PCB,包括以下最少4个部分:

  • 堆段
  • 堆栈段
  • 数据段
  • 代码段
  • 堆段和堆段的增长动态取决于代码(向上或向下取决于系统)。

    所以我的基本问题是

    我们可以添加到Linkedlist中的最大元素,直到系统内存耗尽或堆内存耗尽为止?

    我读到它,直到系统内存耗尽。但我想知道如何?


    我读过的最佳解释:

    由于堆长大,堆栈增长减少,它们基本上相互限制。 另外,因为这两种类型的段都是可写的,所以它们中的一个并不总是违反边界,所以你可能有缓冲区溢出或堆栈溢出。 现在有阻止它们发生的机制。

    每个进程的堆(堆栈)都有一个限制。 这个限制可以在运行时改变(使用brk()/ sbrk())。 基本上,当进程需要更多堆空间并且已经用完分配空间时,会发生什么情况,标准库将向OS发出调用。 操作系统将分配一个页面,该页面通常由用户库管理,供程序使用。 也就是说,如果程序需要1 KiB,操作系统将额外提供4 KiB,并且图书馆将给该程序提供1 KiB,并且当程序下次要求更多时剩下3 KiB以供使用。

    摘自这里。


    如果你动态分配内存,你可以从堆中获得内存。

    从上面的语句可以直接得出结论:如果动态分配列表的节点,则最大节点数量受堆大小(即堆内存量)的限制。

    链接地址: http://www.djcxy.com/p/82721.html

    上一篇: Maximum limit of Linkedlist

    下一篇: Strategy for recovering from NULL == malloc() due to memory exhaustion