链表和内存管理

链表

链表由一个个节点组成。链表中的每一个节点的数据类型为结构体类型,节点有两个成员:数据域和指针域。数据域存放数据成员,指针域指向下一个节点地址。链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。

单链表有一个头节点head,指向链表在内存的首地址。无论在表中访问那一个节点,都需要从链表的头开始,顺序向后查找。链表的尾节点由于无后续节点,其指针域为空,写作为NULL

内存管理

生活中常说的内存,比如“8G内存条”、“500G硬盘”、“电脑内存”等这些都指的是物理内存。

除此之外还有一种内存叫做虚拟内存。虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

比如说4G的虚拟内存,哪怕你的物理内存只有1G,虚拟内存还是4G。

这4G的虚拟内存分成两个部分,1G的内核态和3G的用户态。

其中用户态还分成4个区,分别是数据段、代码段、栈空间、堆空间。数据段存放全局变量、static静态变量。代码段存放代码和常量,被认为是只读的。栈空间存放局部变量(形参也是局部变量)。而像malloc,free之类的函数都是在对堆空间操作。

堆和栈的区别:

堆是操作系统管理,申请和释放都由操作系统完成。

栈由用户管理,申请释放由用户自己完成。                                                                                                                 

猜你喜欢

转载自blog.csdn.net/qq_42379345/article/details/81290271