返回介绍

8.3 本章小结

发布于 2025-04-11 22:33:04 字数 1110 浏览 0 评论 0 收藏 0

程序的内存大致可以分为代码区、静态区、堆和栈四个部分。代码区会存储程序的二进制码,静态区可以存储程序中所使用的全局的、静态的对象以及常量等,局部的非静态对象存储在栈中,而堆是由程序员进行管理的一块内存区域。

若要在堆中存储对象或数据,首先应通过内存申请分配函数来进行堆内存空间的申请,当对象或数据不再被使用时,同样应调用相应内存回收函数,来完成对堆内存空间的回收。C 语言中,可以使用“stdlib.h”头文件中的相关库函数,来对堆内存进行相应的管理。

在堆中申请分配内存空间,有两个相关的库函数:malloc 和 calloc。malloc 函数的功能是在堆中申请参数所指定字节数的一段内存空间,而 calloc 函数可以在堆中申请分配能存储指定数量对象的一段内存空间,因此,它非常便于为数组类型的对象开辟内存空间。另外,使用 calloc 函数还有一个特别之处,就是能够对堆中所申请分配的内存空间进行默认初始化,即将内存空间的各字节都初始化为 0。

释放堆内存的函数为 free,它可以释放参数所指向的一段堆内存空间。应将 malloc、calloc 或 realloc 函数所返回的指针,作为 free 函数的实参进行函数的调用。

当堆中对象或数据不再使用时,要及时释放,防止内存泄漏现象发生。所谓内存泄漏即堆中内存无法进行释放而被永久占用。

可以使用 realloc 函数对堆内存进行重新分配,即将其第一个参数所指向的堆内存调整为第二个参数所指定的大小。若将 realloc 函数的第一个参数设置为 NULL,则 realloc 函数的功能就相当于 malloc 函数。若将 realloc 函数的第二个参数设置为 0,则 realloc 函数的功能就相当于 free 函数。

链表是由任意多的节点所串联构成的一种数据结构,其中节点个数为 0 的链表被称为空链表。链表的各节点在内存中并不一定是连续存储的,也许会分散在内存的不同地方。链表的每个节点分为数据域和指针域,数据域存储着相关的数据,而指针域则存储着另外一个节点的内存地址。

我们通常将当前节点的前一个或上一个节点称为它的前驱节点,将后一个或下一个节点称为它的后继节点。链表中的第一个节点被称为头节点,最后一个节点被称为尾节点,其他的节点均为中间节点。

所谓单向链表,就是每个节点的指针域中只含有一个指向其后继节点指针的链表。而双向链表的指针域中,既含有指向前驱节点的指针,也含有指向后继节点的指针。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。