15.1.数据结构和内存管理概述
(1)数据结构就是研究数据如何组织(在内存中的具体排布),如何加工的学问。数据结构和内存管理联系非常紧密。内存管理对操作系统来说是一件非常复杂的事情,因为首先内存容量很大,其次内存需求在时间和大小块上没有规律(操作系统上运行着的几十、几百、几千个进程随时都会申请或者释放内存,申请或者释放的内存块大小随意)。
(2)常用的数据结构:数组、结构体、栈、队列、堆、链表、哈希表、二叉树、图等。
15.2.内存管理之数组
(1)当一个程序中有很多个类型相同、意义相关的变量需要管理,这个时候如果使用单独的变量来存放会使程序组织起来很乱,这种情况下就可以使用数组更好的管理该类数据。
(2)数组的优势:数组比较简单;通过下标访问;可以随机访问。数组的缺陷:数组中所有元素类型必须相同;数组大小必须定义后给出并且一旦确定不能再改。
15.3.内存管理之结构体
(1)结构体的出现是为了解决数组的”数组中所有元素类型必须相同”这一缺陷。当数据包中元素类型相同时推荐使用数组;当数据包中元素类型不同时推荐使用结构体。
(2)在linux系统内核代码中经常使用结构体内嵌指针实现面向对象,譬如以下包含了函数指针的结构体就类似于面向对象中的class:
15.4.内存管理之栈
(1)C语言中用栈来保存局部变量,一般人们所说的堆栈就是指栈;队列是先进先出的线性表,简称为FIFO表。栈管理内存的好处是方便,内存分配和最后回收都由C语言自动完成,不用程序员操心。
(2)栈管理内存的特点(小内存、自动化):先进后出FILO(first in last out)栈的特点是入口即出口,只有一个口,另一个口是堵死的,所以先进去的必须后出来。队列管理内存的特点:先进先出 FIFO(first in first out)队列的特点是入口和出口都有,必须从入口进去,从出口出来,所以先进去的必须先出来,否则就堵住后面的。
(3)栈的应