动态存储管理:堆与C语言中的malloc()与free()

需积分: 0 0 下载量 150 浏览量 更新于2024-08-22 收藏 384KB PPT 举报
"堆分配存储表示-软件技术基础课件" 在软件技术中,堆分配存储表示是指在程序运行过程中动态地为数据分配内存空间。堆是一个自由存储区,主要由C语言中的`malloc()`函数用于申请内存,而`free()`函数则用于释放已分配的内存。这种方式允许程序在运行时根据需要动态地创建和销毁对象,而不是在编译时预设固定的内存布局。 在堆分配存储表示中,以HString为例,它是一个定义在堆上的字符串结构。`HString`结构体包含两个成员:一个指向字符指针`ch`和一个整型变量`length`表示串长。当创建一个非空的HString时,系统会在堆上为字符串的字符序列分配足够的存储空间,`length`记录字符串的长度,`ch`则指向这个字符序列的起始位置。如果字符串为空,`ch`会被设置为`NULL`。 数组是软件技术中的基本数据结构之一,它是一种特殊的线性表,其中的每个元素具有相同的类型。在多维数组中,如二维数组,可以看作是由多个一维数组(行向量或列向量)组成。在C语言中,二维数组的定义可以等效为一维数组的数组,这使得我们可以灵活地处理多维数组。 数组的存储通常采用顺序存储,即将数组元素按照一定的顺序排列成线性序列。对于多维数组,有两种常见的顺序存储方式:以行序为主序和以列序为主序。行序为主序是按照从左到右、从上到下的顺序存储元素,而列序为主序则是先存储所有列的最上面元素,再依次向下存储。在内存中,这两种方式会导致数组元素在内存中的物理位置不同,影响到元素的访问效率。例如,按行序存储时,数组元素`aij`的位置可以通过公式`Loc(aij) = Loc(a11) + [(i-1)n + (j-1)] * l`计算得出,其中`l`是单个元素的大小。 矩阵的压缩存储通常针对特殊矩阵和稀疏矩阵。特殊矩阵如对角矩阵、三角矩阵等,可以通过只存储非零元素来节省存储空间。对于稀疏矩阵(大部分元素为零的矩阵),常用的压缩存储方法有三元组存储和压缩存储行(CSR)或列(CSC)格式,这些方法可以大大减少对内存的需求,提高处理效率。 堆分配存储表示和数组的组织方式是软件技术中非常基础且重要的概念,它们在实际编程中被广泛运用,特别是在处理动态数据和大规模数据结构时。理解并掌握这些知识对于编写高效、内存优化的代码至关重要。