C语言 链接列表的最大限制



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

我还检查了每当运行任何程序时,操作系统都会为相同的程序创建PCB,包括至少4以下部分:

  1. 堆段
  2. 堆栈段
  3. 数据细分受众群
  4. 代码段

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

所以我的基本问题是

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

我读到它直到系统内存耗尽。但我想知道怎么做?

我读过的最好的解释:

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

每个进程的堆(堆栈)都有一个设置的限制。此限制可以在运行时更改(使用 brk()/sbrk())。基本上,当进程需要更多的堆空间并且已经用完分配的空间时,标准库将向操作系统发出调用。操作系统将分配一个页面,该页面通常由用户库管理以供程序使用。即,如果程序需要 1 KiB,操作系统将额外提供 4 KiB,库将为程序提供 1 KiB,并在程序下次请求更多时剩余 3 KiB 以供使用。

摘自

此处。

如果动态分配内存,则从堆中获取内存。

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

相关内容

  • 没有找到相关文章

最新更新