我是CS世界的新手。在阅读一些书籍时,我检查了内存的动态分配,在程序运行时动态分配内存,内存称为heap.So这意味着每当我想在Linkedlist中创建一个新节点时存储在堆上?或者它存储在内存和访问运行时?
我还检查过,无论何时运行任何程序,操作系统都会创建相同的PCB,包括至少4个以下部分:
堆段和堆栈段动态增长取决于代码(向上或向下取决于系统)。
所以我的基本问题是
我们可以在Linkedlist中添加的最大元素,直到系统内存耗尽或堆内存耗尽?
我读到它直到系统内存耗尽。但我想知道如何?
答案 0 :(得分:2)
最佳解释我还没读过:
由于堆增长并且堆栈增长,它们基本上相互限制。此外,因为这两种类型的段都是可写的,所以它们中的一个跨越边界并不总是违反,所以你可能有缓冲区或堆栈溢出。现在有机制阻止它们发生。
每个进程的堆(堆栈)都有一个设置限制。可以在运行时更改此限制(使用brk()/ sbrk())。基本上发生的是当进程需要更多堆空间并且已经用完已分配的空间时,标准库将向OS发出调用。操作系统将分配一个页面,该页面通常由用户库管理以供程序使用。即如果程序需要1 KiB,操作系统将提供额外的4 KiB,并且该库将为该程序提供1 KiB,并且当程序下次要求更多时,将剩余3 KiB。
摘自here。
答案 1 :(得分:0)
如果动态分配内存,则从堆中获取内存。
从上面的陈述中可以直接得出结论,如果动态分配列表的节点,则最大节点数受堆大小的限制,即堆内存量。