欢迎来到天天文库
浏览记录
ID:59354957
大小:1.08 MB
页数:83页
时间:2020-09-20
《动态内存分配链表ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章链表开始批量数据的存储批量数据的存储方式:数组存储的缺陷:必须预先指定数组的大小链表:不需要事先指定空间大小,动态分配与释放数组链表太小?太大?主要内容动态内存分配单链表概述单链表结点的基本操作单链表的建立单链表的应用循环链表与约瑟夫环问题1动态内存分配C程序的内存划分内存分配方式动态内存分配函数栈区stack静态区static堆区heap代码区code数据区代码区memory存放程序的代码存放程序的全局数据和静态数据存放程序动态申请的数据存放程序的局部数据和参数1-1C程序的内存划分1、栈区(stack):编
2、译器自动分配释放,存放函数参数、局部变量等。2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。3、全局区(静态区)(static):存放全局变量和静态变量,其中初始化的全局与静态变量在一块区域,未初始化的全局与静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区:存放常量字符串,程序结束后由系统释放。5、程序代码区:存放函数体的二进制代码。1-1C程序的内存划分1-2内存分配方式根据内存分配的时机,可分为:静态内存分配;动态内存分配;根据内存分配区域的不同,又可以分为
3、:静态存储区分配;栈区分配;堆区分配;1-2内存分配方式1、 从静态存储区域分配。编译阶段完成分配,在程序结束后内存空间才会被释放。例如全局变量,static 变量。2、 在栈区创建。在执行函数时,函数局部变量可在栈区创建,函数执行结束时自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。1-2内存分配方式3、 从堆区分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意内存,程序员负责用free或delete释放内存。生存期由程序员决定,使用非常灵活。如何使用一个大数组:
4、栈区分配?静态区分配&&堆区分配?1-2内存分配方式静态内存分配把内存的控制权交给了编译器,而动态内存分配则把内存的控制权交给了程序员动态内存管理水平严重依赖于程序员的水平,如果处理不当容易造成内存泄漏动态内存的分配与释放需要占用额外的CPU资源要避免频繁的使用动态内存分配静态分配与动态分配的注意事项1-3C的动态内存分配函数动态内存分配函数是C的标准函数,函数的原型声明在头文件中给出C提供下列与动态内存分配相关的函数void*malloc(unsignedintsize);void*calloc(
5、unsignedintn,unsignedintsize);void*realloc(void*p_block,unsignedintsize);voidfree(void*p_block);1-3C的动态内存分配函数malloc函数:void*malloc(unsignedintsize);向系统申请分配指定字节数的存储空间:分配成功:返回新分配存储空间的首地址,新分配存储空间未被初始化;分配失败:返回NULL例如:inti,*p=(int*)malloc(6*sizeof(int));if(p)for(i=0;i<
6、6;i++)p[i]=i;elseprintf("dynamicallocfailed!");1-3C的动态内存分配函数#include#includeintmain(){inti,j;int*array=NULL;scanf("%d",&i);array=(int*)malloc(i*sizeof(int));for(j=0;j7、}1-3C的动态内存分配函数free函数:voidfree(void*p_block);释放指针p_block指向的动态分配的存储空间,如:free(p);一旦释放,就不能再用该指针引用存储区中的数据如果指针为NULL,free函数无释放操作注意:动态分配的存储空间一定要用free函数释放,而静态分配的存储空间当程序运行完成的时候自动释放1-3C的动态内存分配函数#include#includeintmain(){inti,j;int*array=NULL;scanf("%d",&8、i);array=(int*)malloc(i*sizeof(int));for(j=0;j
7、}1-3C的动态内存分配函数free函数:voidfree(void*p_block);释放指针p_block指向的动态分配的存储空间,如:free(p);一旦释放,就不能再用该指针引用存储区中的数据如果指针为NULL,free函数无释放操作注意:动态分配的存储空间一定要用free函数释放,而静态分配的存储空间当程序运行完成的时候自动释放1-3C的动态内存分配函数#include#includeintmain(){inti,j;int*array=NULL;scanf("%d",&
8、i);array=(int*)malloc(i*sizeof(int));for(j=0;j
此文档下载收益归作者所有